(navigation image)
Home American Libraries | Canadian Libraries | Universal Library | Community Texts | Project Gutenberg | Children's Library | Biodiversity Heritage Library | Additional Collections
Search: Advanced Search
Anonymous User (login or join us)
Upload
See other formats

Full text of "World of 68' Micros, The - Vol. 5 Number 6 (1998-05)(FARNA Systems)(US)"

"*!^ 





Exploriog bow 

DECB stores data 

OQ disk — aijd a 

great utility to edit it! 





Play 

lloliot Za|>! 

Just type in this DECB 
program, and if you 
have a Speech/Sound 
pak listen in! 




CONTENTS 



Ed/tor's Page 2 

Letters 2 

OS'9 "cd" Utility 3 

Marl( l-ieilpern 
CoCo3 Consumer Information 4 

Frank Swygert & Others 
DECB Disk Structure 6 

Robert Gault 
Operating System 9 1 1 

Rick U Hand 
Adventures in Assembly Part 1 16 

ArtFlexser 
RoboZap 18 

EricStriger 
Advertisers Index BC 



Pennsylvania 

Don't forget to make 
plans for the PennFest 

coming in August!! 



Philadelphia 




POSTMASTER: 

If undeliverable return to: 

FARNA Systems PB 

Box 321 

WR, GA 31099 



J 



If your address is incorrect, send me a postcard! 



the world of 68' micros page 1 



WANTED: EDITOR FOR 
"68' micros" MAGAZINE 

Must have good general knowledge 
of the CoCo and all hardware, interest 
in OS-9 and OS-9/68K machines. Must 
have at least a 486 clone with 8MB 
RAM and 40MB free hard drive space 
for necessary software. Should have 
some experience with DTP software 
(software will be provided). Must have 
reliable Internet connection or ability 
to get one. Token payment will be 
made to editor - negotiable. Editor will 
be required to gather information and 
layout pages on provided template. 
Publisher will maintain mailing data- 
base, advertising, shipping, and pro- 
duction. Write or call Frank Swygert c/ 
FARNA Systems (mailing and e-mail 
address below), 912-328-7859 5-1 0pm 
EST weekdays, 9am-10pm EST week- 
ends. Alt applicants considered. 



So a few people panicked. Don't worry, 
"the world of 68' micros" will keep coming 
even if someone doesn't apply for the po- 
sition advertised above. Yes, I'm still look- 
ing. I'm considering dropping the price to 
$20 per year and the frequency to quar- 
terly (those already with subscriptions will 
get an extra issue - no one will lose any- 
thing!). That will keep the magazine going 
a couple more years and give me ample 
time to actually do all the necessary work. 
Will this cause a lot of you to drop your 
subscriptions? I hope not: You are in no 
danger of losing any money - you never 
have been. I keep all magazine money in 



a separate account so that if I did have to 
suddenly quit publishing I could refund any 
remaining funds. As long as the magazine 
IS being published, no refunds will be 
made. And I still intend to publish through 
volume seven (until July 2000) as long as 
there are enough subscribers to make it 
worth while (at least 75-80 - still have 
about twice that number). Let me know 
what you think! 

You know, I got to thinking. Maybe no 
one wants to edit the magazine while I am 
still over the operation. Does anyone feel 
more like taking it over altogether? I would 
be willing to discuss that as a possibility. 
If interested in taking over publication and 
production of 268'm, just get in touch with 
me and we'll explore some options. 

Well, with spring here and more people 
getting outside and away from their com- 
puters, there haven't been many letters. 
So no letters column this time around. 
Don't forget me! A letter or two for next 
issue would be nice. Ask a question, let 
me know what you are stilt doing with your 
CoCo or 68K OS-9 machine, etc. 

I know this issue is late - later than I'd 
like. My military unit has had some deploy- 
ments, meaning we have been short 
handed, and I've had to work some over- 
time. On top of that, we're getting ready 
for a major "test" of the unit's capabilities 
early next year. That means week long "war 
games" with lots of overtime. Getting ready 
for one of those now, and another is sched- 
uled for August and November. I should 
be able to work around all this and keep 
issues from being so late, but they will 
occasionally be late again. Sorry for the 



inconvenience, but this is a part time, one 
man operation! 

Until next issue, keep your CoCo's alive 
and kicking! 



A Quick Letter for ColorZap93 

I just went through an issue with Jeff 
and someone I sent Colorzap-93 to. The 
program will only work on the Coco3 emu- 
lator if the "horizontal interrupt mode" is 
engaged. This can be done with two op- 
tions in the latest version of the emulator. 

You might want to add an editorial com- 
ment about this. I have since made a mi- 
nor code change as a work-around. Look 
at the start of the source code where I time 
the horizontal interrupt to determine the 
clock speed. That can be changed to count 
the vertical interrupt if a 16 bit register is 
used to do the counting. 

Robert Gault 

Thanks for the tip Robert! Now people 
with the emulator can make the change or 
run in the proper mode. 

I'll add that anyone wishing the program 
on disk can send $5 to cover copying, ship- 
ping and handling. But if you want to learn 
assembly, enter the program into your as- 
sembler and study what each segment of 
the well commented listing does. 




the v\forld of 68' micros 



Publisher: 

FARNA Systems PB 

P.O. Box 321 

Warner Robins, GA 31099-0321 

Editor: 

Francis (Frank) G. Swygert 

Subscriptions: 

US/Mexico: $24 per year 

Canada: $30 per year 

Overseas: $50 per year (airmail) 

Back and single issues are cover price. 

Overseas add $3.00 one issue, $5.00 two 

or more for airmail delivery. 

The publisher Is available via e-mail 
dsrtfox@delphi.com 



Advertising Rates: 

Contact publisher. We have scales to suit 
every type of business. Special rates for 
entrepreneurs and "cottage" businesses. 

Contributions: 

All contributions welcome. Submission 
constitutes warranty on part of the author 
that the work is original unless othenwise 
specified. Publisher reserves the hght to 
edit or reject material without explanation. 
Editing will be limited to corrections and 
fitting available space. Authors retain copy- 
right. Submission gives publisher first pub- 
lication rights and right to reprint in any 
form with credit given author. 



General Information: 

Current publication frequency is bimonthly. 
Frequency and prices subject to change 
without notice. All opinions expressed 
herein are those of the individual authors, 
not necessarily of the publisher. No war- 
ranty as to the suitability or operation of 
any software or hardware modifications is 
given nor implied under any circum- 
stances. Use of any information in this 
publication is entirely at the discretion and 
responsibility of the reader. 

All trademarks/names property 
of their respective owners 



ENTIRE CONTENTS COPYRIGHT 
1998, FARNA Systems 



page 2 the world of 68' micros 



Changing DirectariGS 

A standalone '^ccf utility 



Mark HGilpern 



Here is a program I wrote in "c" quite a white back to imple- 
ment a stand-alone 'cd' utility. It gets around the memory protec- 
tion problem by calling _os_permit() to get access. For this to 
work the program must execute as super-user (group 0). If you 
will not always run this as super-user you must modify the code 
somewhat (make the module owned by group and toss in a 
_os_setuid() to change yourself to group early in the program). 
If you have no MMU or are not running the SSM extension there 
is no memory protection. 

/*** This is the first of 2 files ***/ 

#include<types.h> 

#include<stdio.h> 

#include <process.h> 

#include <errno.h> 

#include<cglob.h> 

#jnclude<modes.h> 

error_code findjDroc_desc(processJd, procid **); 

main(ujnt32 argc, char **argv) 

{ 

char ^pathname = argv[1 ]; 

ujnt32 mode = S_IREAD; 
/* change data directory */ 

procid *nrie, *dad; 
/* if no directory was specified, check for default */ 

if (argc~1) pathname = (char*)getenv("HOME"); 

if (pathname==NULL) exit(E_BPNAM); 
/* check for execution directory change request */ 

if (argc>2) 

{ 
if (!strcmp(argv[1 ],"-x")) pathname = argv[2]; 
nnode = SJEXEC; 
/* change execution directory */ 

} 
r do the directory change */ ^ 

errno = _os_chdir(pathname,mode); 

if (errno) exit{errno); 
/* find my process descriptor */ 

errno = find_proc_desc(_procid, &me); 

if (errno) exit(errno); 
/*find my parent's process descriptor*/ 

errno = find_proc_desc(me->_pid, &dad); 

if (errno) exit(errno); 
/*copy over the directory information */ 

errno = _os_cpymem(_procid,&me->_dio,&dad->_dio,DEFIOSIZE); 

if (errno) exit(errno); 
/* and exit */ 

exit{0); 
} 

/*** the next file is for the find_proc_desc() function ***/ 

#include <process.h> 

#include <sysglob.h> 

/* to get system globals */ 

#include<stddefh> 

/* for 'offsetofO macro */ 

#include <modes.h> 

r for pemriit access modes V 

#include <ermo.h> 

extern processjd j3rocid; 

/* my id */ 

r 

** Usage: 

processjd procjd; 
** procid *proc_desc; 

** errno = find_proc_desc (procjd, &proc_desc); 

7 

error_code find jDroc_desc(processJd proc__id. 



procid **proc_desc) 

{ 
ujnt32 *ptab; 
ujnt32 size; 

/* first, find the system's process 7 
/* database table 7 
(void)_os_getsys((offsetof (sysglobs,d_prcdbt)),si2eof(u_int32* 
(glob_bufr)&ptab)i 

/* get access to this memory region 7 
/* number of bytes we need access to 7 
/* (size) is the process id of Interest, 7 
/* times size of each pointer entry (4) 7,„ . 
/* plus the size of one entry (4) 7 

size = (procJd+1)*4; 

errno = _os_permit(ptab,size,SJREAD,_procid); 

if (errno) return{errno); 
/* got the table, lets index into it 7 

*proc_desc = (procid*)ptab[proc_id]; 
r finally, get access to that memory 7 

(void)_os_pennnit(*proc_desc,sizeof( procid), 
S_IREADtS_IWRITE,_procid); 
/* note, don't need error checking on 7 
/*the last _osj3ermit(), since the call 7 
rshould only fail if not running 7 
/*as super user, since the first pemnit 7 
/*call worked, we must be a SU 7 



return (0); 




} 



Questions? I can be reached via e-mail at: 
heilpern@microware.com. If you don't have 
e-mail access, feel free to write the editor in 
reference to this article 



Ron Butt Itti/ites \lou Jo Attend 

PennFest '98 

The Second Pennsylvania CoCoFest! 

August 15th and 16th 

Sam -5pm each day 

Holiday Inn East 

4751 Lindle Road 

Harrisburg, PA 17111 

(Call 717'939-7841 for reservations) 

Many vendors have already registered to attend! 

Buy software, hardware, meet new and old friends, 

learn new tricks, hear the guest speakers, 

and most of all, have fun! 

Admission is $5 per person per day or 
$15 for a "Family Pass" good for both days. 

For more information contact Ron Bull 

Phone 717-834-4314 

ronbull@aoLcom 

www.geocities.com/SiliconValleyA/ista/1412 



the world of 68' micros page 3 



Celer Ccmputer 3 Ccnsumer Inf crmatien 

frank Swrseri & ^€ther§*^ 



Editor: Rather than edit the following, I printed as it was 
originally written five to six years ago. At the time, the Intel 
386SX/1 6MHz processor was the popular choice for home 
computers, with 286 models between 12 and 16 MHz the 
most numerous. This was edited from various sources. 

I. WHAT IS A COLOR COMPUTER? 

The Tandy Color Computer 3 is a very inexpensive yet 
powerful connputer for the home or small business. The 
original Color Computer, introduced in 1980, boasted eight 
colors at a time when all other Radio Shack computers in 
the TRS-80 line were monochrome (one color - green or 
amber on a black background), hence the name "Color 
Computer". Unfortunately, the name has a toylike conno- 
tation. The Color Computer 3 is not, however, a toy. It can 
do all those things generally expected of personal comput- 
ers. Technically, it compares quite favorably with comput- 
ers priced much higher. 

The Color Computer is probably the most versatile per- 
sonal computer on the market. In its simplest form, it can 
be used with a TV set and Nintendo-like cartridges. In its 
most complex form, it can be configured with a multisync 
color monitor, a hard drive, and run several programs at 
the same time with the OS-9 operating system. The Color 
Computer uses standard peripherals (except monitors) such 
as serial printers, floppy disk drives (360K and 720K), hard 
disk drives, and modems. It offers an amazing combina- 
tion of simplicity, power, and versatility. 

II. WHAT CAN IT DO? 

The Color Computer will not run software designed for 
other personal computers (i.e., it is not IBM- or Apple-com- 
patible, although the BASIC computer language that is in- 
cluded with the standard Color Computer 3 is nearly iden- 
tical to the GW-BASIC used by IBM-compatible comput- 
ers). Nevertheless, the software necessary for doing all 
tasks commonly done on personal computers is available 
for the Color Computer 3. Professional quality programs 
exist for many vahed applications, including the following: 

WORD PROCESSING programs feature index and table 
of contents generation, mail merge, editing in multiple win- 
dows, programmable macros, spelling and punctuation 
checkers, with up to 160 pages in memory at one time 
(512K machine). 

DATABASE programs for both general and specific needs 
(e.g., recipes). 

SPREADSHEET programs offer up to 512 columns by 
1024 rows, with graphics. 

DESKTOP PUBLISHING programs include a tremendous 
variety of fonts and clip art, for use with any printer. 

GRAPHIC DESIGN programs allow the Color Computer 
user to simply and inexpensively create custom title screens 
for home or business videos, or "slide shows" for business 
presentations. 

MUSIC programs support MIDI-equipped music synthe- 
sizers. 



TELECOMMUNICATIONS programs support all major 
protocols for going "on-line", and include VT-100 and VT- 
52 mainframe terminal emulations. One can get on the 
Internet through on-line services that still use a "shell" ac- 
count (such as Delphi), but there are no graphical web 
browsers available. Electronic mail, broker services, travel 
services, information services, etc., are available through 
Delphi, which still has a text interface. Internet "use-nef 
groups are also available. While the text interface doesn't 
offer all the "pretty pictures" of the graphical web browsers, 
it has the advantage of being simple and fast. 

EDUCATION* programs range from learning the ABC's 
to calculus. 

COMPUTER LANGUAGES available for the Color Com- 
puter include C, Pascal, LOGO, BASIC-09, and FORTH09. 

Simplified word processing, file, and spreadsheet appli- 
cations are available in cartridge form and are both less 
expensive and easier for the beginner to use than similar 
programs for other computers. Most software for the Color 
Computer is generally less expensive (sometimes quite a 
bit less) than similar software for other computers. In addi- 
tion to standard software applications, the Color Computer 
3 has built-in scientific and foreign language symbols, and 
arithmetic, tngonometric, and logarithmic math functions. 

The Color Computer 3 can utilize the OS-9 disk operat- 
ing system (optional), which is probably the most powerful 
operating system available for any personal computer. OS- 
9 is based on UNIX (used on large mainframe computers). 
It is the operating system used by NASA when communi- 
cating with satellites and the space shuttle. It transforms 
the Color Computer into a true multitasking system, which 
simply means it is capable of running several programs on 
the screen at the same time, in independent "windows", 
like a $2000 IBM PS/2. "Multi-Vue" is a program that makes 
the power of OS-9 readily accessible through the use of 
"point-and-click" icons (pictures), much like the Macintosh. 

III. HOW DOES IT COMPARE? 

The heart of the Color Computer is a so-called "eight-bit" 
microprocessor, the Motorola 6809E, which is a more pow- 
erful microprocessor than the 6502 used in the Apple ll's 
and the Commodore 64/128. The 6809 possesses several 
sixteen-bit registers used for mathematical, logical, and 
graphics operations, giving it some of the power of six- 
teen-bit computers such as the Commodore Amiga, the 
Macintosh, and the IBM AT. 

The maximum clock speed of the Color Computer is 1 .788 
MHz, almost twice as fast as an Apple He that sells for five 
times as much! Note that clock speed is NOT a good mea- 
sure of computer speed, as the efficiency of the chip is 
more important The Color Computer 3's exclusive GIME 
(Graphics Interrupt Memory Enhancement) chip, and the 
powerful OS-9 disk operating system, working together, 
allow the Color Computer 3 to surpass the speed of a typi- 
cal IBM PC In many benchmark tests. Indeed, at its intro- 



page 4 the world of 68' micros 



duction, Tandy officials demonstrated the Color Connputer 
3 beating Tandy's own 1000 SX running at 7.16 MHz. The 
Color Connputer 3 is fast enough for any home or small 
business needs. It compares favorably to an Intel 80286 
processor running at 12MHz. Remember, the Windows 
graphical user interface requires a lot of power and memory. 
If you've been around Intel machines for a long time, you 
should remember that it didn't take a lot of power to do 
most common tasks until Windows came along! 

From the factory the Color Computer 3 comes with 128K 
of memory. This can be inexpensively increased to 51 2K 
with Tandy or third-party cards, and up to 1 megabyte with 
a third-party upgrade. Most available programs require only 
128K, although some of the latest and larger programs re- 
quire 512K of memory. 

Screen resolution in the text mode may be either 40 col- 
umns by 24 lines or 80 columns by 24 lines. Screen resolu- 
tion in the graphics mode may be either 320 dots horizon- 
tally by 192 dots vertically (320x192, with sixteen colors 
on the screen), or 640x192 (with 4 pure colors on the 
screen). Both text and graphics high resolution modes can 
be increased by software to 80x28 or 640x225 (12.5% more 
dots per screen than IBM CGA resolution of 640x200). In 
the highest resolution graphics mode, the four pure colors 
may be combined to form even more colors. Additionally, 
a total of 64 pure colors are available, which, through a 
technique called "palette-switching", provides animation 
abilities not possible on low-cost IBM-compatibles (for ex- 
ample, a flickering fire). All lower resolution graphics and 
text modes of the earlier Color Computers are also sup- 
ported so that older programs will work. The large charac- 
ters of the older 32x16 text screen are easy on the eyes of 
senior citizens or others with visual impairment. 

The Color Computer 3 may be used with a TV set (color 
or b&w), a composite monitor (color or monochrome), or 
an analog RGB monitor, or even all three simultaneously! 
The RGB monitor is required for the high resolution text 
modes, but most programs support both TV (composite) 
and RGB modes. Other than the monitor, the Color Com- 
puter is compatible with IBM-standard peripherals such as 
floppy disk drives and disks (both 5.25 inch and 3.5 inch), 
hard disk drives, modems, and, with an inexpensive "se- 
rial-to-parallel converter", printers (even laser pnnters). 
Tandy 1000 series joysticks, mice, and printers plug right 
in. More exotic peripherals such as video digitizers, MIDI 
interfaces (for use with music keyboards), and sophisti- 
cated voice synthesizers are also available. Use of a cas- 
sette recorder is supported as a very inexpensive and simple 
alternative to a disk drive. 

IV. WHY BUY A COLOR COMPUTER? 

if you have a need for a specific program that is not avail- 
able for the Color Computer, or you would like or need to 
maintain compatibility with computers at work, buy a com- 
puter that meets that need. HOWEVER, if you simply need 
"a computer" for writing a novel, tracking the stock market, 
putting out a Cub Scout newsletter, or predicting the next 
eclipse of the moon, the Color Computer 3 will fill the bill 
admirably. Consider these advantages: 

LOW COST: A basic system consisting of computer, 



Tips for new users ea&er tc get started 

1 . NEVER, EVER plug or unplug anything into the large side 
port while the computer is turned on! If you do, you could blow 
the processor. This Isn't an expensive part, but it is tedious to 
replace. A 40 pin chip has to be desoldered and removed from 
the circuit board, a socket soldered in, and a new processor put 
in the socket. A TV shop would charge about $30 to pull the 
original processor and put in a socket, and a processor is about 
$20. 

2. Game cartridges (program Paks) plug into the side port. 
Turn the computer off, plug in the pak, then turn it on. These 
games all self-start. Some have instruction screens, others you 
need the book for or will need to experiment with. Applications 
came in cartridges also, not just games. 

3. Some games and such will ask what kind of monitor you 
have. Select either TV or Composite, (Color) monitor if you have 
a TV or monitor that plugs into round connectors on the back of 
the CoCo. The RGB monitor is special for the CoCo3. They aren't 
real expensive, used ones are under $100. Multi-sync monitors 
work, but have to sync down to 15.75KHz for the CoCo. This is 
the same as the old IBM compatible "CGA" monitors. NEC Multi- 
Sync and Multi-Sync II monitros work fine. 

4. Games on disk are pretty easy. With the disk drive control- 
ler plugged into the computer and the disk drive power on, put a 
disk in with the label side up. Now type DIR on the computer 
and press the ENTER key. You will have a directory of what is on 
the disk (that's why DIR... short for DIRectory). 

5. Gamesor programs that end in .BIN are binary or machine 
language programs. To start one of them, type: 

LOADMTROGRAM <ENTER> 

PROGRAM will be the name before the BIN, <ENTER> means 
press the ENTER key. The game will start. Some you end by 
pressing the red <BREAK> key. Others you have to press the 
RESET button on the back, next to the power button . If that doesn't 
end it, hold the <CTRL> and <ALT> keys down and press the 
RESET button. You will get a picture on the screen of three of 
the programmers who worked on the CoCo at Tandy. Press the 
RESET button again and the game will end. <CTRL> <ALT> 
RESET clears everything from memory. You can of course turn 
the power off, but if you do, count to FIVE before turning the 
power back on. It doesn't like sudden off/on cycles, could blow 
the processor!! 

6. Games of programs that end in .BAS are BASIC programs 
written in the BASIC computer language. The CoCo has BASIC 
built in, so all you have to do is type: 

RUN"PROGRAM <ENTER> 

PROGRAM will be the name before the BAS. <ENTER> means 
press the ENTER key. The game will start. 

All BASIC games should end by pressing the <BREAK> key, 
but if it doesn't do the same as with BIN programs. 

7. You will need a few blank disks for later. What you want is 
5.25" DOUBLE DENSITY disks, or 360K disks. DO NOT get 
5.25" HIGH DENSITY disks (1.2MB), as they won't work right. 
Any Radio Shack will be able to get disks, and computer stores 
MIGHT have some. 



disk drive, and monochrome monitor is only $400. An ab- 
solute beginner, supplying his or her own TV and cassette 
recorder, could get started for only $100! 

continued on page 21 

the world of 68' micros page 5 



Color Computer Disk Basic Disk Structure Robert Gauit 

And a binary disk editor - ColorZap 93 - to boot! 



When Tandy finally marketed a disk system for the Color Com- 
puter, it did all users a big favor by releasing complete details on 
disk structure under Disk Basic. This made it possible for users 
to write some very interesting programs for the disk system and 
even find ways to overcome bugs present in DOS version 1.0. 
Happily Tandy and Microware were just as forthcoming when 
OS-9 was released. The complete details on disk structure un- 
der OS-9, different from Disk Basic, were documented. 

Among the first programs written for the Coco disk systems 
were disk editors. These programs made it possible to read raw 
data from a disk, modify it if desired, and write it back to a disk 
ignoring the directory and file structure. This permitted users to 
repair the trashed disks, directories, and files which sooner or 
later happen to everyone. 

My favorite disk editor for OS-9 is dEd by Doug DeMartinis. 
For some time I wanted an equivalent program for Disk Basic 
and finally wrote it myself. The source code for this Disk Basic 
look and workalike to dEd is part of this article. It can be com* 
piled without any changes by my patch to Tandy's EDTASM (which 
i sell as EDTASM6309) or any other assembler that can use 
lower case, local labels, and multiple FCBs. Readers who have 
stock EDTASM can still assemble the program by replacing alt 
labels of the form a@ with standard labels and using upper case 
for all source code. Replace any FCB 1,2,3 statements with 
separate FCB and FDB lines as needed. However, before look- 
ing at the source code let's see how Disk Basic organizes a disk. 

Tracks, Sectors, and Granules 

Regardless of your computer or disk operating system, disks 
must be formatted before use. Formatting is the process that 
takes a blank disk and partitions it into pieces that can be used 
by a computer. Disk Basic separates the disk into 35 pieces called 
tracks that are numbered 0-34. Each track is about 6,250 bytes 
(8 bit words) of which 6,084 are divided into 18 pieces called 
sectors, numbered 1-18, while the rest are system control bytes. 
Each sector contains 338 bytes where 256 bytes are for data 
and the rest are for system control. 

Tandy describes the system control bytes in detail in the "Own- 
ers Manual & Programming Guide" for Disk Basic but this can 
be ignored by all but the most inveterate hackers. However, all 
users should know how the data portion of the disk is organized. 
Remember the data is stored in 256 bytes per sector, 18 sectors 
per track, and 35 tracks per disk side. This is a total of 161 ,280 
data bytes per disk side. 

Coco Disk Basic reserves track 17 for the directory. You can 
think of the directory as a special file that stores the names, 
location, and file types of all files on the disk side. The other 34 
tracks are divided into 68 pieces called granules. Each granule 
is 2,304 bytes long or 9 sectors and there are two granules per 
track. You may be saying, "If the tracks have already been di- 
vided into sectors, why are they also divided into granules?" 

Sectors are the low level structure of a disk, while granules are 
the low level structure of Disk Basic files. Putting it differently, 
the minimum space that a file can reserve under Disk Basic is 
2,304 bytes even if the file is one byte long. This minimum re- 
served space is known as a granule in Disk Basic or a cluster 
under OS-9 where it can be as small as a 256 byte sector. Since 
the minimum space a Disk Basic file can reserve is one granule, 
it is easy to see that the maximum number of files per disk side 
is 68, the total number of granules. 

Why are the Disk Basic clusters larger than OS-9 clusters? 
There is a trade off between wasted space and the possibility of 
file fragmentation. Large clusters can waste disk space but they 

page 6 the worid of 68' micros 



help prevent the sectors of a file from being scattered all over a 
disk. Tandy madfe an arbitrary choice for large cluster size. 

Directory and File Allocation Table (FAT) 

I have already said that track 17 is reserved for the directory, 
the index for all files on the disk. In Color Disk Basic, the direc- 
tory track has the following structure: sector #1 not used, sector 
#2 file allocation table (FAT), sectors #3-11 directory entries, 
sectors #12-18 not used. The FAT only uses the first 68 bytes of 
sector #2, corresponding to the 68 granules on the disk. The FAT 
is a map of the granules used by each file with the byte number 
equivalent to the granule used. If a FAT byte has the value $FF 
then it is not in use. A FAT byte value from 0-$43 points to the 
next granule in a file. A FAT byte value of $C0-$C9 indicates the 
number of sectors in the last granule. 

If you have been following this closely, you may be asking, 
"Why have a FAT value of $C0?" This is a special case for zero 
length files that still are assigned one granule; $C0 indicates 
that no sectors were used. You may also have been wondering 
why Disk Basic does not use a 40 track disk. Clearly there is 
sufficient room in both the FAT and directory entry area to cover 
78 granules worth of files. This unfortunately, is an example of 
Tandy marketing expertise. The disk structure can support 40 
tracks, but Disk Basic software cannot. It is simple to patch Disk 
Basic to format and access 40 tracks per side but the file system 
still cannot make use of the extra tracks. So much for 40 track 
disks under Disk Basic, let's get back to the directory structure. 

Each directory entry uses 32 bytes. The first 8 bytes (0-7) con- 
tain the left justified file name. The next 3 bytes (8-10) contain 
the extension (ex. .BAS). Byte 11 indicates the file type: = 
BASIC program, 1 = BASIC data file, 2 = machine language 
program, 3 = text editor source file. Byte 12 indicates whether 
the file is ASCII ($FF) or binary format ($00.) You may remem- 
ber that Basic programs are normally saved to disk in tokenized 
format. They can be saved in ASCII text format by the command 
SAVE"filename",A. Byte 13 is the number of the first granule in 
the file and bytes 14-15 indicate the number of bytes used in the 
last sector of the file. Finally, bytes 16-31 were reserved for fu- 
ture use and must be all zeros for compatibility with Tandy's 
EDTASM that does use these bytes. 

The directory entry section starts with all bytes having the value 
$FF. As entries are added, the table grows and sooner or later 
some files will be deleted. When this happens, the first byte of 
the entry for the deleted file is set to $00. The next new file is 
added into this vacated slot. 

Why a Disk Editor? 

There are many reasons for using disk editors ranging from 
simple curiosity, to disk repair, to breaking copy protection 
schemes. Have you ever deleted a file and immediately had the 
sickening feeling of erasing the only copy of a 40 hour project? 
With a good disk editor, you stand a very good chance of being 
able to recover the file. This is because the file still exists on the 
disk until the space is reused. What has been lost is the chain of 
granule entries in the FAT and the first letter of the file name in 
the directory. If you change the first name byte from $00 to what- 
ever it was and reenter the FAT information, your file will be re- 
covered. You can find the first file granule by looking at the direc- 
tory entry, to find the rest you must look at each granule on the 
disk for identifying text or code. 

Colorzap-93 is a machine language disk editor for Coco3 only. 
With it you can select for examination drives, granules, tracks, 
or sectors and modify any byte. You can search a disk for a 



pattern of bytes either hexadecimal or ASCII. One powerful op- 
tion is the ability to link to any file on the disk and scroll through 
the file without having to know where the file sectors are located. 
Information displayed on screen can be sent to a printer. For 
those of you who use OS-9, Colorzap-93 looks and works like 
dEd so you only have to remember one set of commands. 

Colorzap-93 works ia an 80 column screen with a fast clock 
setting. However, the program tests your original clock speed 
and uses that speed for all disk I/O. The original clock speed is 
reset when you exit the program. Colorzap-93 supports D0S1 .0, 
DOS 1.1, and RGBDOS. The program has a repeat key function, 
so holding down an arrow key permits rapid scrolling through 
sectors. The program auto starts on loading with the first screen 
displayed being the instructions. 

The Source Code 

There are two ASM files used with Colorzap-93. There is a 
short file EDTDEFS that is a list of equates (equ) which I use 
with several of my programs. The main file, COLORZAP, is some 
1700 lines long. Most of the critical lines have comments and I 
will not cover the code further except to point out several inter- 
esting routines that you may want to use in your own programs. 

Lines 1 1 60 - 1 320 determine whether the CoCo is running at 1 
or 2 MHz by counting loop cycles between interrupts. Lines 1 730 
- 1 950 determine what screen colors are currently in use so that 
the program can use reverse colored letters regardless of the 
user's preference. Lines 16610 - 16990 are a repeat keys routine 
based on code by Roger Schrag. Lines 17020 - 17030 make the 
program auto-starting. 

You will notice that whenever possible, I make calls to the 
Basic ROM routines. This makes the program much shorter than 
it otherwise would be. 1 am therefore indebted to the information 
contained in the Spectral Associates, "Basic Unravelled" series. 

If you have questions about the code or cannot get it to com- 
pile and run, send questions by e-mail to: 

robert.gault® worldnet.att.net 



' Basic entry points for Coco3 D0S1 .1 
title EDTDEFS 



00100 

00110 

00120 

00130 els equ $F6E0 

00140 wdth32 equ $F652 

00150 wdth40 equ 

00160 wdthSO equ 

00170 locate equ 

00180 prints equ 

00190 decout equ 

00200 scrprt equ 

00210 dskcon equ 

00220 trkzro equ 

00230 getchr equ 

00240 ikeyim equ 

00250 waitky equ 

00260 hedtkO equ 

00270 read equ 2 

00280 wnteequ 3 

00290 charad equ 

00300 getnch equ 

00310 getcch equ 

00320 binval equ 

00330 linbuf equ 

00340 CR equ 

00350 LF equ 

00360 bik equ ' 

00370 colon equ ': 

00380 bkspc equ $08 

00390 zero equ $8a two bytes are always fdb 



00000 title COLORZAP-93 

00010 * (c) by Robert Gault September 1993; VR. 1.6 

00020 ' Full ml version of a disk editor program 

00030 * Emulates dEd [by Doug DeMartinis (c) 1987] from the OS-9 world. 

00040 * 9-29-93 Seek, Edit, Write, Find, Next, Copy, Repeat keys 

00050 • 10-10-93 Link, Unlink, and correction needed to find, next, copy, etc. 

00060 * 10-15-93 When linked, last sector stops printing at last byte. 

00070 * 10-20-93 Corrected bug in linkyedit: bad char does not leave edit 



$F65C 

$F679 

$F8F7 enter with reg.a=column reg,b=row 

$B99C 

$BDCC send # in reg.D as ASCII 

$A30A 

$C004 POINTER TO DSKCON ROUTINE 

$D7B8 

$A1 B1 blink while waiting 

$87 in key image 

$ADFB wait for key no blink; go to Basic on break 





$A6 
$9F 
$A5 
$2B 
$2DC 



Basic line buffer 



$0D 
$0A 



00080 * Down arrow roll-over in last sector corrected. 

00090 • 10-21-93 Added adjustable max values for track/sector. 

00100 * 1 1-02-93 Corrected spelling of "hexadecimar, 

00110 * 12-28-93 Handle incorrect file structure; ie. files where last sector 

00120 * contain zero bytes. Adjust maxgrn when adjusting maxtrk & 

00130* maxsec. 

00140 * 3-3-94 Added info to help screen. 

001 50 * 4-6-94 Changed repeat keys to K and records to R 

00160 * 5-6-94 Added (P) screen dump to printer. 

00170 * 1 1-2-95 Corrected error in xitopn routine which had an incorrect 

001 80 * error trap. Added auto start routine. 

00190 

00200 org 

00210 fgetnm rmb 2 get file name offset 

00220 fopen rmb 2 open file offset 

00230 fstfcb rmb 2 set file FCB offset 

00240 fget rmb 2 get record from file offset 

00250 flof rmb 2 get length of file 

00260 fclose rmb 2 close file offset 

00270 fdir rmb 2 

00280 

00290 org $E00 

00300 start bra begin program has fixed exec loaction 

00310 data equ * 

00320 drive rmb 1 working values 

00330 trackrmb 1 

00340 sector rmb 1 

00350 gran rmb 1 

00360 recnumrmb 2 record number of open file; max=612 

00370 lof rmb 2 length of file 

00380 Istsec rmb 1 last sector flag; O=:not FF= last sector 

00390 fcblst rmb 2 bytes in last sector+$ee; points to buffer 

00400 linhdr rmb 1 counter; holds $00, $10,$20,.,$F0 

00410 color rmb 1 0=normal; FF=reversed 

00420 stndcl rmb 1 normal attributes used by program 

00430 revrcl rmb 1 reverse color attrs 

00440 hexfig rmb 1 0=hex; FF=ascii 

00450 mtcflg rmb 1 0=no match; FF=matth used by next; set by find 

00460 splits rmb 1 0=no split; FF=split match across sector boundary 

00470 mtctrk rmb 2 this holds track & sector of last find 

00480 frcnum rmb 2 this hold record number of linked match 

00490 fndloc rmb 2 find offset in buffer 

00500 endmtc rmb 2 end of current match data in target buffer 

00510 hextoc rmb 1 x screen location; hex. table 

00520 rownum rmb 1 y screen location 

00530 asctoc rmb 1 x screen location; ascii table 

00540 iol rmb 1 temp, i/o storage 

00550 io2 rmb 1 

00560 repfig rmb 1 0=repeat key not installed FF=installed 

00570 cpyfig rmb 1 copy active flag 0=no FF=yes 

00580 drvmax rmb 1 filled by program; varies with 35-40 tk system 

00590 maxtrk rmb 1 

00600 maxgrn rmb 1 

00610 maxsec rmb 1 

00620 dos rmb 1 indicates DOS version 

00630 •0=DOS1,0. 1 =0031.1, 2=RGB-D0S, 3=unknown 

00640 drvflg rmb 1 FF=drive set 0=dnve not selected 

00650 opnfig rmb 1 file open flag; O=none FF=open 

00660 enddat equ * what follows does not get erased 

00670 clock rmb 1 O=slow 1 =fast 

00680 

00690*************************************************************** 

00700 * Customize Colorzap-93 by changing the DOS jump tables. 

00710 * Addition of functions to the table Must be accompanied by * 

00720 * simultaneous additions to the first RMB table above. 

00730********************************* — ******** 

00740 

00760 dosiO fdb $c8a4 get file name 

00760 fdb $c468 open file 

00770 fdb $c808 point to fcb 

00780 fdb $c2ccget record 

00790 fdb $cd5d get LOF 

00800 fdb $ca3b close 

00810 fdb $cbd2 dir 

00820 dos11 fdb $c952 get file name 

00830 fdb $c48d open 

00840 fdb $c838 point to file fcb 

00850 fdb $c2e6 get record; reg.D=record number 

00860 fdb $'ce39 get LOF 

00870 fdb $cae9 close all files 

00880 fdb $ccacdirreg.B=drive#; 

$eb = drive # 
00890 

00900 * system equates 
00910 iobffr equ $989 i/o buffer for find/next 
00920 eiobuf equ iobffr+$100 
00930 mtctrg equ $d00 match characters stored 
here; target 

the world of 68' micros page 7 



00940 tmpbuf equ $lda temporary buffer; 256 bytes 

00950 secmaxequ 18max. sector value; min.=1 

00960 ' table positions are - n 

00970 hextbl equ 5*$ 100+3 x=5;y=3 

00980 asctbl equ 58x=58 

00990 hexcel equ 3 size {in spaces) of a single 

table byte 
01000 
01010 * Include many standard defs^based on 

ROM Basic 
01020 include EDTDEFS 
01030 title COLORZAP-93 
01040 page 
01050 

01060 begin ldx$fffe 
01070 cmpx#$8c1b 
01080 beq b@ 
01090 leax a@-1,pcr 
01100 jmp prints 

01110a@ fee /SORRY! THIS PROGRAM IS FOR/ 
01120 fob CR 

01130 fee /THE C0C03 ONLY!!/ 
01140 fcb CR,0 
01150 b@ jsrwdthSO 

01160 orcc #$50 determine system clock rate 
01170 cira 
01180 Idb $ffOO 
01190 c@ Idb $ff01 
01200 bpl c@ 
01210 d@ Idb $ff00 
01220 Idb $ff01 
01230 bmi d@ 
01240 e@ inca 
01250 Idb $ff01 
01260 bpl e@ 
01270 andcc #$af 
01280 clrb 
01290 empa#8 
01300 bto sctock 
01310 incb 

01320 sctock stb clock 
01330 stb $ffd9 set fast clock 
01340 

01350 clr$71 set for cold restart 
01360 ldx#data 
01370 Idb #enddat-data 
01380 cIra 

01 390 a@ sta ,x+set all data to 
01400 decb 
01410 bne a@ 
01420 ldx#iobffr 
01 430 stx$EE set drive buffer to FCB buf 

#1 location 
01440 Ida #secmax 
01450 sta maxsec 
01460 ldx#$322 max drive & track; 4 drives 

35 tracks 
01470 stxdrvmax 

01480 Ida #$43 max gran; 35 track system 
01490 sta maxgrn 
01500 Idx$c002 pointer to disk basic 
01510 cmpx#$2004 
01520 beq init 
01530 inc dos at least dosLI 
01540 IdxScOOa DOS 
01550 empx#$df00 
01560 beq init 

01570 me dos at least RGB-DOS 
01 580 * ldx#$2243 probably RGB system; 35 tracks 
01590 ' sbcmaxtrk 

01600 Idx[$d936] alt RGB-DOS DSKCON entry 
01610 cmpx#$3476 pshs d,x,y,u 
01620 beq irgb 
01630 inc dos 
01640 bra init 

01650 irgb Ida $150 read max drive 
01660 sta drvmax 
01670 init inc sector sector can't be 
01680 Idx#$c58f console in 
01690 tstdos 
01700 beq init2 
01710 Idx#$c5bc 
01720 initS stx$16b 

01730 Ida $FE08 current attributes 
01740 anda#%00111111 
01750 tfr a,b 

01760 anda #7o00111000 keep foreground 
01770 Isra nomnalize 0-7 
page 8 the world of 68' micros 



01780 Isra 

01790 Isra 

01800 adda #8 foreground palettes start at 8-15 

01810 andb #%00000111 keep background 

01820 ldx#$FFBO start of palettes 

01830 Ida a.xget foreground color 

01840 anda #%00111111 

01850 Idb b,xget background color 

01860 andbr/oOOmill 

01870 sta I4,x attr 6; store palette colors 

01880 stb 15,x attr 7 

01890 sta 6,x attr ,6 

01900 stb 7.x attr ,7 

01910 Ida #%00110111 attr 6,7 normal; attr 7,6 

reverse color 
01920 sta $FE08 set new attributes 
01930 sta stndcl keep an image 
01940 Ida #%00111110 reverse color attributes 
01950 sta revrct keep an image 
01960 Idxzero remove ON BRK and ON ERR 
01970 sb($fe0cONBRK 
01980 stx$fe0eON ERR 
01990 leax drven-.pcr set new error dnver 
02000 Ida #$7e 
02010 sta $191 
02020 stx$192 
02030 Ibsr ckdos 
02040 jsr[fclose,xl 
02050 sta $ffd9 fast clock 
02060 Ids #$7ffe set stack 
02070 Idd #2 set two FCBs; #1 not active 
02080 stb $95b active FCBs ^ 2 
02090 ldx$928 point to FCB #1 
02100 sta ,x closed 
02110 decb =1 

02120 std 7,xrecord number - 1; will print as 
02130 leax mcmd, per set return address 
02140 pstis X 
02150 Ibra help display help screen then 

go to command 
02160 

02170 drverr leas 2,s pop return; entered via JSR 
02180 cmpb#54 bad record 
02190 beq xerr 
02200 err2 cmpb#52 file not found 
02210 bne xerr 
02220 leax NEmsg-1,pcr 
02230 jsr prints 
02240 jsrgetchr 
02250 jsr unlink 
02260 xerr Ids #$7ffe 
02270 bra main 
02280 NEmsg fcb CR 
02290 fee /FILE does not exist!/ 
02300 fcb 
02310 
02320 ctrkey pshs d,x speeds up arrow key 

functions; needed even with 
02330 ldx#$152 repeat key routine 
02340 Idd #$ff08 
02350 ckip sta ,x+ 
02360 decb 
02370 bne ckip 
02380 puts d,x,pc 
02390 
02400 main ldx#iobffr needed because some disk 

routines change it 
02410 stx$ee 

02420 Ibsr screen acquire data and show sector 
02430 mcmd bsr wcmd print CMOS: 
02440 circpyfig 

02450 jsrgetchr wait for a key press 
02460 cmpa#'A 
02470 bio mcmd2 
02480 anda #.not.$20 make upper case 
02490 mcmd2 bsr evicmd evaluate key 
02500 bcs mcmd loop if not command 
02510 bsr cmdjmp execute command 
02520 bcs mcmd if illegal arguments loop 

without read 
02530 bsr cirkey 

02540 bra main if legal arguments get new data 
02550 

02560 evicmd leay cmds.pcr point tocommand table 
02570 cmpa#'Q quit and 
02580 beq evO 

02S90 empa#'D drive select always available 
02600 beq evO 



02610 tstdrvfig all others must make sure 

drive was selected 
02620 beq nodrv 

02630 evO Idb #cmdend-cmds total # of commands 
02640 ev 1 ompa ,y+ hunt 
02650 beq ev2 
02660 decb 
02670 bne evi 
02680 ev3 comb indicate error 
02690 rts return with carry set 
02700 ev2 pshs b 
02710 Idb #cmdend-cmds 
02720 subb .s+ reg.b=cmd#(0toc-1) 
02730 cIra clear carry 
02740 rts 

02750 nodrv leax ndrmsg-l.pcr 
02760 jsr prints 
02770 jsrgetchr 
02780 bra ev3 
02790 ndrmsgfcc /Please select a drive! 

Hit any key when ready/ 
02800 fcb 
02810 

02820 cmdjmp leax jmptbl.pcr 
02830 Isib 

02840 abx point to command 
02850 jmp [,xj 
02860 

02870 wcmd Idd #21 col=0 row=22 
02880 jsr locate 

02890 leax blklin-1, per blank line 
02900 jsr prints clear command line 
02910 Idd #22 
02920 jsr locate 
02930 leax cmdb(t-1,pcr 
02940 jmp printSprint CMDS: 
02950 emdb<t fee /CMOS:/ 
02960 fcb 

02970 cmds fee ''H/?DGTSCEFNWZQ^'' 
02980 fcb $0A down arrow 
02990 fee /KLUIRP/ 
03000 cmdend equ * 
03010 

03020 jmptbl equ ^ 
03030 fdb help 
03040 fdb help 
03050 fdb help 
03060 fdb setdrv 
03070 fdb setgrn 
03080 fdb settrk 
03090 fdb setscS 
03100 fdb copy 
03110 fdb edit 

03120 fdb find find string: hex or alpha numeric 
03130 fdb next find next occu ranee 
03140 fdb wrtsec write sector to disk 
03150 fdb zap erase sector 
03160 fdb quit return to Baste 
03170 fdb secup increment sector 
03180 fdb seedwn decrement sector 
03190 fdb repkey 
03200 fdb link 
03210 fdb unlink 

03220 fdb reset adjust max track & max sector 
03230 fdb setscR actually set record* 
03240 fdb print dump screen to printer 
03250 
03260 

03270 biklin fee / /40spaces 

03280 fee / /40spaces 

03290 blkln2 fee / /40spaces 

03300 fee / /40spaees 

03310 fee / /40spaces 

03320 fee / / 39spaces 

03330 fcb 

03340 twoblk fee I I 2 spaces 
03350 fcb 

03360 betwn fee / / 5 spaces between 
hex. & ascii tables 
03370 fcb 
03380 

03390 sure leax surmsg-1 ,pcr 
03400 jsr prints 
03410 sure2 jsrgetchr 
03420 anda #.not,$20 
03430 cmpa#'Y 
03440 beq sr 
03450 coma 



FARNA Systems 

Your mo5t complete source for Co\or Computer ar)d 05-9 information! 



Post Office Box 321 
\Narner Robins, GA 51099 
Phone: 912-32S-7S59 

E-mail: dsrtfox^deiphi.com 



XKC^O ^3 ^^.t-g^ ^^ C^>C%/\/.Ai3>=l, ^-tO OV^^/V,S^>^,S 



BOOKS: 

Mastering OS-9 - $30.00 

Completely steps one through learning all 
aspects of OS-9 on the Color Computer. 
Easy to follow instructions and tutorials. 
With a disk full of added utilities and soft- 
ware! 

Tandy's Little Wonder - $25.00 

History, tech info, hacks, schematics, re- 
pairs,... almost EVERYTHING available for 
the Color Computer! A MUST HAVE for 
ALL CoCo aficionados, both new and old!!! 
This is an invaluable resource for those 
trying to keep the CoCo alive or get back 
into using it. 

Quick Reference Guides 

Handy little books contain the most refer- 
enced info in easy to find format. Size 
makes them unobtrusive on your desk. 
Command syntax, error codes, system 
calls, etc. 

CoCo OS-9 Level II : $5.00 
OS-9/68000 : $7.00 

Complete Disto Schematic set: $15 

Complete set of all Disto product schemat- 
ics. Great to have... needed for repairs! 

CMCK OUT W€ NEW 
[LOW PRICES ON NITHO PMVUCTS!] 

See editorial in this issue for details^ 




SOFTWARE: 

CoCo Family Recorder: Best genealogy 
record keeper EVER for the CoCo! Re- 
quires CoCo3, two drives (40 track for OS- 
9) and 80 cols. 
DECB: $15.00 OS-9: $20.00 

DIglTech Pro: $10.00 

Add sounds to your BASIC and M/L pro- 
grams! Very easy to use. User must make 
simple cable for sound input through joy- 
stick port. Requires CoCo3, DECB, 51 2K. 

ADOS: Best ever enhancement for DECB! 
Double sided drives, 40/80 tracks, fast 
formats, extra and enhanced commands! 
Original (CoCo 1/2/3) : $10.00 
ADOS 3 (CoCo 3 only) : $20.00 
Extended ADOS 3 (CoCo 3 only, requires 
ADOS 3, support for 512K-2MB, RAM 
drives, 40/80 track drives mixed) : $30.00 
ADOS 3/EADOS 3 Combo: $40.00 

Pixel Blaster -$12.00 

High speed graphics tools for CoCo 3 OS- 
9 Level II. Easily speed up performance of 
your graphics programs! Designed espe- 
cially for game programmers! 

Patch OS-9 - $7.00 

Latest versions of all popular utils and new 
commands with complete documentation. 
'Auto-installer requires 2 40T DS drives 
(one may be larger). 



TuneUp : $10.00 

Don't have a 6309? You can still take ad- 
vantage of Nitro software technology! 
Many OS-9 Level It modules rewritten for 
improved speed with the stock 6809! 

Thexder OS-9 

Shanghai OS-9 : $10.00 each 

Transfer your ROM Pack game code to 
an OS-9 disk! Requires ownership of origi- 
nal ROM pack. 

Rusty : $10.00 

Launch DECB programs from OS-9! Load 
DECB programs from OS-9 hard drive! 

NitrOS-9: 

Nitro speeds up OS-9 from 20-50% de- 
pending on the system calls used. This is 
accomplished by completely rewriting OS- 
9 to use all the added features of the Hita- 
chi 6309 processor. Many routines were 
streamlined on top of the added functions! 
The fastest thing for the CoCo3! Easy in- 
stall script! 6309 required. 
Level 3 adds even more versatility to Ni- 
tro! RBF and SCF file managers are given 
separate blocks of memory then switched 
in and out as needed. Adds 16K to sys- 
tem RAM... great for adding many devices! 
NitrOS-9 V.2.0: $10.00 
NitrOS-9 Level 3: $10.00 



Th^ AT306 05-9 Sirii^la Board Computer 



AT306 Motherboard Specs: 

16 bit PC/AT I/O Bus (three slots) 

MC68306 CPU at 1 6.67MHz 

Four 30 Pin SIMM Sockets 

IDE Hard Drive Interface 

Floppy Drive Interface (1 80K-2.88M) 

Two 1 6 byte Fast Serial Ports (up to 1 1 5K baud) 

Two 'Temninar Serial Ports (no modem) 

Bidirectional Parallel Port 

Real-time clock 

PC/AT Keyboard Controller (five pin DIN) 

Included Software Package: 

"Personal" OS-9/68000 Vr 3.0 

(Industrial with RBF) 
MGR Graphical Windowing Environment 

with full documentation 
Drivers for Tseng W32i 

and Trident 8900 VGA cards 
Drivers for Future Domain 1680 

and Adaptec AAH15XX SCSI cards 
Many PD and customized utilities and tools 



The AT306 is a fully Integrated single board computer. It is de- 
signed to use standard PC/AT type components. Sized the same as 
a "Baby AT" board (approximately 8" square). Compact and inex- 
pensive enough to be used as an embedded controller! Use with a 
terminal (or terminal emulation software on another computer) or 
with a video card as a console system. Basic OS-9 drivers are in 
ROM, making the system easy to get started with. 



HACKERS MINI KIT (FARNA-11100): Includes AT306 board, OS-9 and drivers, 

util software, assembly Instructions/tips, T8900 1MB video card. Add your own 

case, keyboard, drives, and monitor! ONLY $5001 



Call for a quote on turn-key systems and quantity pricing. 
Warranty is 90 days for labor & setup, components limited to manufacturers warranty. 

Microware Programmers Package - 

Licensed copies of Microware C compiler, Assembler, Debugger, 

and many other toolsl 

With system purchase: $65.00 Without system: $85.00 

the worid of 68' micros page 9 



03460 srrts 

03470 surmsgfcb CR 

03480 fee / Write sector to disk; are you sure?/ 

03490 fcb 

03500 

03510 hprntS jmp prints 

03520 

03530 header pshs y 

03540 cirlstsec 

03550 leax copyrt-1,pcr 

03560 bsr hprntS 

03570 leax head 1-1, per drive 

03580 bsr hprntS 

03590 Ida drive 

03600 jsrdecprt print decimal number 

03610 Idd #12*$100+1 across, down 

03620 jsr locate 

03630 leax head2-1,pcr gran 

03640 bsr hprntS 

03650 Ida gran 

03660 bmi hi directory track does not have 

gran value 
03670 Ibsr hexprt print hexadecimal number 
03680 hi Idd #23*$100+1 
03690 jsr locate 
03700 leax head3-1,pcr track 
03710 bsr hpmtS 
03720 Ida track 
03730 jsrdecprt 
03740 Idd #36*$100+1 
03750 jsr locate 
03760 leax head4-l,pcr sector 
03770 bsr hprntS 
03780 Ida sector 
03790 jsrdecprt 
03800 Idd #48*$100+1 
03810 jsr locate 
03820 leax head4b-1,pcr 
03830 bsr hpmtS 
03840 ldx$928 point to FCB #1 ; recnum may 

not - last sector 
03850 Idd 7,x 
03860 subd #1 
03870 cmpdiof 
03880 bio h2 
03890 com Istsec 
03900 h2 jsrdecout 
03910 Idd #62*$ 100+1 
03920 jsr locate 
03930 leax head4c-1,per 
03940 bsr hprntS 
03950 Idd lof 
03960 jsrdecout 
03970 Ida #CR 
03980 jsrscrprt 
03990 bsr flipct reverse colors 
04000 leax head5-1,per print byte numbers 
04010 jsr prints 

04020 bsr normcl normal colors 
04030 Ida #CR 
04040 jsrscrprt 
04050 puis y,pc 
04060 

04070 normcl pshs a,cc 
04080 Ida stndcl 
04090 norml2 sta $fe08 
04100 puis a,cc,pc 
04110 

04120 flipclpshs a,cc 
04130 Ida revrcl 
04140 bra norml2 
04150 

04160 copy rt fee / / 

04170 fee /COLORZAP-93(e) Sept. 1993 by 

Robert Gault VR. 1.6/ 
04180 fcb CR,0 
04190 head1 fee /DRIVE. #/ 
04200 fcb 
04210 head2 fee /GRAN: $/ 
04220 fcb 

04230 head3 fee /TRACK: #/ 
04240 feb 
04250 head4 fee /SECT:#/ 
04260 feb 

04270 head4b fee /RECORD #/ 
04280 fcb 
04290 head4c fee /LOF #/ 
04300 fcb 

page 10 the worid of 68' micros 



04310 head5 fee / 0123456789 

A B C D E F/ 
04320 fee / / 6 spaces 
04330 fee /O 2 4 6 8 A C E / 
04340 fcb 
04350 footn fee / 0123456789 

A B C D E F/ 
04360 fee / / 6 spaces 
04370 fee / 1 3 5 7 9 B D F/ 
04380 feb 
04390 footr2 fcb CR 
04400 fee /# = decimal number 

$ = hexadecimal number/ 
04410 feb 
04420 

04430 error leax errmsg-l.pcr 
04440 jmp prints 
04450 errmsg fcb CR 
04460 fee 'Disk I/O error! Drive not ready.' 
04470 fcb CR,0 
04480 wrking fee /Working .... Floppy drives 

are slow./ 
04490 feb CR,0 
04500 

04610 screen jsrclsetear screen 
04520 leax wrking-1,pcr 
04630 jsr prints 
04540 clrlinhdrclear counter 
04550 tst Opnfig 
04560 beq secred 
04670 ldx$928 pointer to FCBs 
04580 Ida 3,x 
04590 sta gran 
04600 pshs a 
04610 Ibsr elets 
04620 deeb 
04630 puis a 
04640 bita #1 
04650 bne noeir 
04660 cirb 
04670 noeIr addb 4,x 
04680 stb sector 

04690 Idd 19,x get bytes in last sector 
04700 addd See add buffer location 
04710 std fcblst 
04720 bra nxtino 

04730 secred Ida #read command for dskeon 
04740 Idb drive tell dskeon the parameters 
04750 std $EA 
04760 Idd track 
04770 std SEC 
04780 Ibsr diskon 
04790 Ibne error 
04800 nxtInO Idd zero 
04810 Jsr locate 
04820 Ibsr header print common header with 

drive.gran, track, sect 
04830 IdySEE point to dskeon buffer 
04840 nxtlin pshs y 
04850 Ibsr flipel flip colors 
04860 Ida linhdrget row counter 
04870 Ibsr hexprt print ASCII hexadecimal 
04880 Ida #colon 
04890 jsr serprt 
04900 Ibsr normcl reset colors 
04910 leax twoblk-1,pcr 
04920 jsr prints 

04930 Idb #16 print 16 ASCII hexadecimal bytes 
04940 sloop 1 Ida ,y+ print byte value 
04950 tst opnfig 
04960 beq sluplb 
04970 tst Istsec 
04980 beq sluplb 
04990 cmpy febtst 
05000 bis sluplb 
05010 Ida #$ff 
05020 sluplb bsr hexprt 
05030 Ida #blk print space 
05040 jsrscrprt 
05050 deeb 
05060 bne sloopi 
05070 leax betwn-l.pcr 5 space gap 
05080 jsr prints 

05090 Idy.s recover buffer pointer 
05100 Idb #16 print ASCII character or-." 
05110 sloop2 Ida ,y+ 
05120 tst opnfig 
05130 beq slup2b 



05140 tst Istsec 

05150 beq slup2b 

05160 cmpyfeblst 

05170 bis slup2b 

05180 Ida #$ff 

05190 slup2b bsr aseprt 

05200 deeb 

05210 bne sloop2 

05220 Ida #CR 

05230 jsrscrprt 

05240 Ida linhdr update line header; $10 per line 

05250 adda #$10 

05260 sta linhdr 

05270 puis y 

05280 leay $10,y update line/buffer pointer 

$10 per line 
05290 empa#0 finished a sector? 
05300 bne nxtlin no?; then loop 
05310 Ibsr flipel 
05320 leax footr1-1.per 
05330 jsr prints 
05340 Ibsr normcl 

05350 leax footr2-1,per message #=dee. $= hex. 
05360 jmp prints 
05370 

05380 aseprt anda #$7f remove fes bit 
05390 empa#$7f printer sees this as delete 
05400 beq period 
05410 cmpa#btk 
05420 bhs norm 

05430 period Ida #'. exclude control codes 
05440 norm jmp serprt 
05450 
05460 hexprt pshs a print binary* as ASCII 

hexadecimal 
05470 Isra get MSN 
05480 Isra 
05490 Isra 
05500 Isra 
05510 bsr digit 
05520 puis a 
05530 anda #$F 
05540 digit cmpa#9 is it a number 
05550 bis numb 

05560 adda #7 must be letter; offset to letters 
05570 numb adda #'0 convert to ascii 
05580 jmp serprt 
05590 

05600 decprt tfr a,b print byte as ASCII decimal 
05610 eira 

05620 jmp deeout decimal out 
06630 

05640 cmdst2ldx#linbuf+1 
05650 Idd ,x 

05660 tsta was there an entry? 
05670 bne cmd3 

05680 andec #.not.4 no entry; indicate bad entry 
05690 rts 
05700 cmd3 tstb 
05710 bne hxDbin 
05720 tfr a,b 
05730 Ida #'0 
05740 
05750 hxDbin bsr hexbin convert ascii hex 

reg.D tp binary in reg.A 
05760 bcs hxDxit 
05770 Isia 
05780 Isia 
05790 Isia 
05800 Isia 
05810 exg a,b 
05820 bsr hexbin 
05830 bcs hxDxIt 
05840 pshs b 
05850 adda ,s+ 
05860 bra notlet 
05870 hxDxit rts 
05880 
05890 hexbin suba #'0 convert ascii hex. in 

reg.A to binary in reg.A 
05900 bcs invaH 
05910 cmpa#9 
05920 bis notlet 
05930 suba #7 
05940 cmpa#$F 
05950 bhi invaH 

continued on page 12 



operating system nine 

CoCo IV ideas 



Rick Ulland 



Posted recently gn the Internet 
CoCo List concerning talk about 
the possibility of creating a 
"CoCo4"" 

Come on people. The CoCo had 
its day, it saw the light, but please 
get a grip and move on! There will 
not be a CoCo IV or V or VI or 
whatever There is no money. You 
barely support the WIe" people still 
giving... 

ME: 

I'm afraid I must agree with you 
to some extent. Gone are the days 
when a person could finance a 
good idea by making a few origi- 
nal CoCo addons. But this sort of 
hardware has low budget potential, 
in that you don't need the $5000 
boardcutting or workstation class 
development system. Anyone with 
a pClone and $500 can make a 
small run of sub10 MHz parts. 

Now what you do with them... if 
'new' means 'take the CoCo design 
and tack a xyz on it' there would 
be no reason at all to build a 
CoCo4. It's original mission has 
been filled. For Joe User, budget 
computing consists of castoffs from 
the pClone wars. If you want stable 
multitasking, use linux. If you want 
lots of applications, use Win3.1 
and reboot every few hours. 

This brings us to CoCo4. Our 
community has a larger than nor- 
mal share of hobbiests. These are 
the guys that used to build TV daz- 
zlers and twist tie old teletypes to- 
gether. The resulting machines 
weren't that useful in themselves, 
but they developed the techniques 
and people that got us (the com- 
puting public) where we are today. 

But where have we gone? The 
fastest Pentium wonderbox is noth- 
ing more than a really big Altair. It's 
got huge drives, it's got wastelands 



of DRAM, perps to amaze the most 
jaded hacker But it's still a one in- 
struction wide path to a lone cpu - 
- CP/M with animated wizards. I 
refuse to believe this represents 
the ultimate in computing architec- 
ture. 

But commercially viable comput- 
ers aren't hackable. You pretty 
much run the motherboard they 
sold you. As long as 'commecially 
viable' means 'really fast Altair' 
they're kind of boring, so we should 
investigate a new paradigm that 
can later be scaled up in the Atlair- 
>Wintel mold. 

The solution proposed is true 
'multiprocessing'. Rather than one 
overworked wafer laboring under 
Its Own Fan, a 'computer' would 
be a collection of cpus working to- 
wards a possibly common goal. 
This is going to require software a 
little beyond biilyBASIC, bringing 
us to the CoCo3 and OS9. This 
alternative opsys has a smart 
scheduler, doesn't leak, and is al- 
ready segmented in exactly the 
right places, with each 'process' 
nearly independent enough to 
move offboard already. And in 
hardware the CoCo has been us- 
ing dual port DRAM (cpu, com- 
bined refresh/video) for years. 

Great for the hackers involved, 
ignores the guy that needs a $50 
upgrade path. So we've decided to 
stay as CoCo like as possible in 
the prototypes of any "CoCo IV". 
This way, anything useful can be 
drawn up as a CoCo version. 
Where it ends, we'll see. I've al- 
ready designed a board that con- 
trols interupts through hardware, 
taking a big task away from the 
CPU under OS-9 (but pretty use- 
less for DECB users). 

But Frank recently told me about 
a fellow in Great Britain who has 
done what was discussed in Chi- 



cago a couple years ago - well, 
almost. When the first seminar on 
the CoCo IV project was held at the 
Chicago CoCoFest in 1997, the 
general consensus was that the 
best way to pursue a prototype 
would be to make an I/O controller 
that took a lot of the general work 
tasks away from the main proces- 
sor. This would plug into the side 
port and take care of the keyboard, 
interrupts, and anything else we 
could give it. The board would have 
a 6809, a PIA or two, and what- 
ever necessary circuitry to do the 
jobs given it. Then OS-9 would be 
patched to use the added proces- 
sor. 

We weren't the first to get this 
idea! This Briton did almost the 
same thing with a Dragon and 
Dragon DOS (Tano's version of 
DECB) some years ago. Only he 
went an easier route - let the CoCo 
be the I/O procesoor and the 
added 6809 the "main" one! 

Sounds so logical it is hard to see 
why we didn't think of it! Since the 
CoCo processor is already pro- 
grammed to do all the I/O func- 
tions, leave it alone! Pass the code 
crunching to another CPU, in this 
case clocked at 3MHz. and let the 
CoCo process the results! This 
chap says it works fine, and will be 
sending Frank some schematics 
and code later. Hope he comes 
through, I can't wait to see this stuff 
and start designing a board any 
OS-9 user would be proud to have! 




the world of 68' micros page 1 1 



ColorZap93 (continued from page 10) 

05960 notlet andcc #not.1 

05970 orcc #4 

05980 rts 

0599C invall orcc #1 

06000 hxxit rts 

06010 

06020 decbin ldx#linbuf+1 

06030 orcc #1 

06040 Ida ,x 

06050 beq decxit 

06060 Idycharad 

06070 pshs y 

06080 stxcharad 

06090 jsr$AF67 

06100 puis y 

06110 stycharad 

06120 tstopnflg 

06130 beq db 

06140 tstcpyfig 

06150 bne db 

06160 Idd binval 

06170 andcc #-not.1 

06180 rts 

06190 db tsta 

06200 bne baddrv 

06210 Ida binval+1 

06220 cirb 

06230 decxit rts 

06240 

06250 Inkmsg fee /Must link to file!/ 

06260 fob 

06270 unlmsg fee /Must unlink file!/ 

06280 fcb 

06290 setdrv tstopnflg 

06300 beq a@ 

06310 ulerrleax unlmsg-1,pcr 

06320 ulerr2 jsr prints 

06330 jsrgetehr 

06340 orcc #1 

06350 rts 

06360 Inkerr leax lnkmsg-1,pcr 

06370 bra uterr2 

06380 a@ leax drvnum-l.pcr 

06390 Ibsr cmdset print query; get answer 

06400 bsr decbin convert to binary 

06410 bcs baddrv 

06420 cmpadrvmax 

06430 bhi baddrv 

06440 sta drive 

06450 cira 

06460 deca 

06470 sta drvflg indicate drive selected 

06480 bsr setgrn 

06490 bcs b@ 

06500 bne b@ 

06510 bsr settrk 

06520 b@ Idxzero 

06530 stxmtetrk 

06540 sbcfndloc 

06550 clrmtcflg 

06560 rts 

06570 baddrv coma 

06580 rts 

06590 drvnum fee /Drive: #/ 

06600 fcb 

06610 

06620 setgrn tstopnflg 

06630 bne ulerr 

06640 leax grnnum-1,pcr 

06650 Ibsr cmdset 

06660 Ibsr cmdst2 

06670 bcs nogrn 

06680 bne nogrn 

06690 cmpamaxgrn 

06700 bhi baddrv 

06710 sta gran 

06720 Ibra cicts 

06730 nogrn eira 

06740 rts 

06750 grnnumfcc / Gran: $/ 

06760 fcb 

06770 

06780 settrk tst opnflg 

06790 bne uterr 

06800 leax trknum-l,pcr 

06810 Ibsr cmdset 

page 12 the world of 68' micros 



06820 Ibsr decbin 

06830 bcs baddrv 

06840 cmpamaxtrk 

06850 bhi baddrv 

06860 sta track 

06870 bsr ssec 

06880 cIra 

06890 rts 

06900 trknum fee / Track: #/ 

06910 feb 

06920 

06930 recmsg fee /RECORD #: / 

06940 fcb 

06950 setscS tst opnflg 

06960 beq ssec 

06970 Ibra ulerr 

06960 x@ bra baddrv 

06990 setscR tst opnflg 

07000 bne setrec 

07010 Ibra Inken- 

07020 setrec leax recmsg- 1, per 

07030 Ibsr cmdset 

07040 bcs x@ 

07050 Ibsr decbin 

07060 cmpdlof 

07070 bhi x@ 

07080 cmpd#0 

07090 beq x@ 

07100 std reenum 

07110 ssecO ldx#(obffr 

07120 sb<$ee 

071 30 ldx$928 pointer to fcb #1 

07140 stx$f1 

07150 Clr15,x 

07160 clr16,x 

07170 clr17,x 

07180 ctr18,x 

07190 clr6,x 

07200 clr$d8 used as GET/PUT flag; 0=get 

07210 Ibsr ekdos 

07220 jsr[fget,x] 

07230 sta $ffd9 

07240 ctra 

07250 rts 

07260 ssec leax seenum-1,pcr 

07270 Ibsr cmdset 

07280 Ibsr decbin 

07290 bcs x@ 

07300 cmpa#0 

07310 beq x@ 

07320 cmpamaxsec 

07330 bhi x@ 

07340 Sta sector 

07350 bra etcgrn 

07360 secnum fee/ Sector: #/ 

07370 fcb 

07380 

07390 cictslda gran calculate track/sector from 

gran# 

07400 idb #1 sectors start at 1 

07410 bita #1 

07420 beq a@ 

07430 Idb #10 sector=10 on odd grans 

07440 a@ cmpa#33 track 16 

07450 bis b@ 

07460 adda #2 compensate for track 1 7 

07470 b@ Isra 

07480 std track 

07490 andcc #.not,5 

07500 fts 

07510 

07520 clcgrn Ida sector calculate gran# from 

track/sector 

07530 cIrb even gran 

07540 empa#9 

07550 bis a@ 

07560 ineb odd gran 

07570 a@ Ida track 

07580 cmpa#17 

07590 beq d@ 

07600 bio b@ 

07610 deca compensate for track 1 7 

07620 b@ tsia 2 grans/track 

07630 pshs b 

07640 adda ,s+ 

07650 c@ sta gran 

07660 andcc #.not.5 

07670 rts 



07680 d@ Ida #$FF directory no gran number 

07690 bra c@ 

07700 

07710 quit leax a@-1,per 

07720 jsr prints 

07730 jsrsure2 

07740 bcs hxit 

07750 Ibsr setclk 

07760 imp [$fffel 

07770 a@ fee /QUIT Are you sure?/ 

07780 fcb 

07790 

07800 help jsr els 

07810 leax helpms-l,per 

07820 a@ jsr prints 

07830 Idd ,x 

07840 bne a@ 

07850 b@ jsrgetehr 

07860 beq b@ 

07870 cIra 

07880 hxit rts 

07890 

07900 helpms fee "H gets this message; also / 

or?" 
07910 feb CR,0 
07920 fee "Up/Down arrows move to next/ 

previous sector" 
07930 fcb CR,0 
07940 fee "D select drive number; [gran, track/ 

sector]" 
07950 fcb CR.O 
07960 fee /G select gran value/ 
07970 feb CR,0 

07980 fee /T select track value; [sector]/ 
07990 fcb CR,0 
08000 fee /S select sector value; R record # 

if linked/ 
08010 fcb CR,0 

08020 fee /Ccopy current sector to D,T, 8/ 
08030 fcb CR 
08040 fee / enter each value separately with 

ENTER key/ 
08050 fcb CR,0 
08060 fee /E edit current sector/ 
08070 fee /; must Write sector to make changes 

permanent/ 
08080 feb CR,0 
08090 fee /F find string; hex. or alphanumeric; 

case sensitive/ 
08100 feb CR 

081 10 fee /; quit search in progress with any key/ 
08120 fcb CR,0 
081 30 fee /P print screen; preset BAUD for 2MHz 

from BASIC/ 
08140 fcb CR,0 

08150 fee /N next occurance of string/ 
08160 fee /; starts at last match regardless of 

current sector/ 
08170 fcb CR 
08180 fee ' no action if last find/next 

unsuccessful' 
08190 fee /; quit searching with any key/ 
08200 fcb CR,0 

0821 fee A/V write cunrent sector to disk/ 
08220 fcb CR.O 
08230 fee /L link to disk file; 'ENTER' gives 

directory./ 
08240 fcb CR,0 
08250 fee /U unlink from disk file/ 
08260 fcb CR,0 
08270 fee /2 zap current sector with selected 

value/ 
08280 feb CR.O 

08290 fee /K repeat key function. Use ONLY if 
your ROM does not/ 
08300 fee / have built in repeats./ 
08310 feb CR.O 

08320 fee /Q quit program for Basic/ 
08330 fcb CR,0 
08340 fee /I Adjust allowable maximum track 

and sector values / 
08350 fee /for oddball disks;/ 
08360 fcb CR 
08370 fee / usually 34 or 39T & 1 88. 

USE CAUTION!/ 
08380 fcb CR,0 
08390 fee / / 

08400 fee /Q indicates optional parameters/ 



08410 fcb CR,0 

08420 fee / / 

08430 fee /any key returns to mam screen/ 

08440 fcb 0,0 

08450 

08460 secup tst opnflg 

08470 beq a@ 

08480 Idd recnum 

08490 cmpdiof 

08500 Ibhs baddrv 

08510 addd #1 

08520 bra d@ 

08530 a@ Idd track increment sector; track if 

necessary 

08540 cmpbmaxsec 

08550 beq b@ 

08560 incb 

08570 bra c@ 

08580 b@ empamaxtrk 

08590 Ibeq baddrv 

08600 Idb #1 

08610 inca 

08620 c@ std track 

08630 Ibra cicgrn 

08640 secdwn tst opnflg 

08650 beq e@ 

08660 Idd recnum 

08670 subd #1 

08680 beq g@ 

08690 d@ std recnum 

08700 Ibra ssecO 

08710 e@ Idd track decrement sector; track if 

necessary 

08720 cmpb#1 

08730 beq f@ 

08740 decb 

08750 bra c@ 

08760 f@ tsta 

08770 g@ Ibeq baddrv 

08780 Idb maxsec 

08790 deca 

08800 bra c@ 

03810 

08820 cmdsetjsr prints print command and get 

answer 

08830 

08840 * Replacement for Basic line input. Needed 

because Basic prints CR at 

08850 * end of input, 

08860 

08870 linein ldx#linbuf+1 

08880 Iinin2 Idb #1 

08890 linlup jsr$A171 

08900 cmpa#bkspc 

08910 bne notbs 

08920 decb 

08930 beq linein 

08940 leax -1,x 

08950 bra echo 

08960 notbs empa #$1 5 shift left arrow 

08970 bne noclin 

08980 din decb 

08990 beq linein 

09000 Ida #bkspc 

09010 jsrscrprt 

09020 bra din 

09030 noclin cmpa#3break 

09040 orcc #1 

09050 beq linxlt 

09060 cmpa#CR 

09070 bne inschr 

09080 cira 

09090 linxlt pshs cc 

09100 dr,x 

09110 puis ccpc 

09120 inschr cmpa#blk 

09130 bio linlup 

09140 cmpa#'z+1 

09150 bhs linlup 

09160 cmpb#250 

09170 bhs linxtt 

09180 sta ,x+ 

09190 incb 

09200 echojsrscrprt 

09210 bra llntup 

09220 



09230 wrtsec Idb drive write sector to disk 

09240 stb $EB 

09250 Idxtrack 

09260 sb($EC 

09270 wsec2 ibsr sure 

09280 bcs nowrt 

09290 Ida #write 

09300 sta SEA 

09310 Ibsr diskon 

09320 bne badcpy 

09330 nowrt rts 

09340 

09350 * Copy sector to any other sector at any drive 

or track 

09360 

09370 copy com cpyfig 

09380 leax cpymsg-l.pcr 

09390 bsr cmdset 

09400 Ibsr decbin 

09410 bcs badcpy 

09420 cmpadrvmax 

09430 bhi badcpy 

09440 sta $EB 

09450 bsr more 

09460 cmpa maxtrk 

09470 bhi badcpy 

09480 sta SEC 

09490 bsr more 

09500 cmpa maxsec 

09510 bhi badcpy 

09520 sta $ED 

09530 bra wsec2 

09540 more Ida #colon 

09550 jsrscrprt 

09560 jsr linein 

09570 Ibsr decbin 

09580 bcs badcpy 

09590 ris 

09600 badcpy coma 

09610 rts 

09620 cpymsgfcc /Enter destination Drive#<CR> 

Track#<CR> Sector#<CR>: / 

09630 fcb 

09640 

09650 * Fill sector with any single character; ie. erase 

sector 

09660 

09670 zap leax zapmsg-1,pcr 

09680 Ibsr cmdset 

09690 Ibsr cmdst2 

09700 bne badcpy 

09710 bcs badcpy 

09720 IdxSEE 

09730 cirb 

09740 zioop sta ,x+ fill write buffer 

09750 incb 

09760 bne zIoop 

09770 Ibra wrtsec 

09780 zapmsg fee/Enter ZAP byte: $/ 

09790 fcb 

09800 

09810 * Find any hex. or ascii character string up to 

125 hex or 250 ascii 

09820 'bytes of data. 

09830 

09840 find Idd #21 

09850 jsr locate 

09860 leax fndmsg-1,pcr 

09870 jsr prints 

09880 fndinp Idd #22 

09890 jsr locate 

09900 leax blkln2-1,pcr 

09910 jsr prints 

09920 Idd #22 

09930 jsr locate 

09940 leax fndh-1,pcr 

09950 tst hexflg 

09960 beq findh 

09970 leax fnds-1,pcr 

09980 findhjsr prints 

09990 ldy#tmpbuf 

10000 Ibsr linein 

10010 cmpa#3 BREAK key 

10020 bne fnd2 

10030 com hexflg 

10040 bra fndinp 



10050 fnd2cmpx#linbuf+1 

10060 Ibeq badcpy no input for find 

10070 tst hexflg 

10080 bne fasdl 

1 0090 fhex Idb ,-x 

10100 Ida #"0 

10110 cmpx#linbuf+1 

10120 beq h1byt 

10130 Ida ,-x 

10140 hibyt Ibsr hxDbin 

10150 Ibcs badfnd 

10160 sta ,y+ 

10170 cmpx#linbuf+1 

10180 bne fhex 

10190 ldx#tmpbuf cassette buffer used as 

temporary hold 

10200 pshs X 

10210 ldx#mtctrg 

10220 hi Ip Ida ,-y 

10230 sta ,x+ 

10240 cmpy.s 

10250 bne hllp 

10260fasci2 leas 2,s yank temp data 

10270 stxendmtc save end of match data 

10280 tdxzero 

10290 stxmtcfig clear match and split find 

indicator 

10300 stxfndloc 

10310 leax 1,x 

10320 sb<frcnum initialize to record #1 

10330 bra fndwds now go get it 

10340 

10350 fascii ldy#linbuf+1 

10360 pshs X 

1 0370 ldx#mtctrg 

10380 h2tp Ida ,y+ 

10390 sta ,x+ 

10400 cmpy ,s 

10410 bne h2!p 

10420 bra fasci2 

10430 

1 0440 * find the string 

1 0450 fdwdsO Idd zero 

10460 std fndloc 

1 0470 tst mteflg 

1 0480 beq fndwds 

10490 com splits 

10500 fndwds tst opnflg 

10510 beq fndO 

10520 Idd recnum 

10530 cmpdiof 

10540 bhi fpk3 

10550 pshs x,y,u 

10560 Ibsr ssecO 

10570 puts x,y,u 

10580 jsrSalcl 

10690 bne fpk3 

10600 Idd recnum 

10610 addd#i 

10620 std recnum 

1 0630 bra fp5 

10640fpk3 Idd frcnum 

10650 std recnum 

1 0660 Ibra ssecO 

1 0670 fndO bsr readsc 

1 0680 jsr $a1 c1 check keyboard break on any 

key 

10690 beq fpkl 

10700fpk2 Idxtrack 

10710 sbcSec 

10720 dra 

10730 rts 

1 0740 fpk1 Idd Sec get track/sector 

10750 cmpbmaxsec max sector? 

10760 beq fpl 

10770 incb 

10780 bra fp2 

10790 fp1 cmpamaxtri^ 

10800 bne fp3 end of disk; stop reading sectors 

10810 Ida #$80+19 

10820 sta Sed sector; will create illegal read 

below 

10830 bra fp5 

10840fp3 Idb #1 

1 0850 inca 

10860fp2 std Sec 

the world of 68' micros page 13 



28456 S.R. 2, New Carlisle, IN 46552 

2 19-654-7080 eves & ends MO, Check, COD; US Funds 

Shipping included for US, Canada, & Mexico 

MM/1 Products (OS-9/68000) 
CDF $50.00 - CD-ROM File Manager! Unlock a wealth of files on CD with the MM/1 ! Read most text and 
some graphics from MS-DOS type CDs. 

VCDP S50.00 - New Virtual CD Player allows you to play audio CDs on your MM/ 1 ! Graphical interface 
emulates a physical CD player. Requires SCSI interface and NEC CD-ROM drive, 

KLOCK $20.00 - Optional Cuckoo on the hour and half hour! ! Continuously displays the digital time and 
date on the /term screen or on all open screens. Requires I/O board, I/O cable, audio cable, and speakers. 

WAVES vr 1 .5 $30.00 - Now supports 8S VX and WAV files. Allows you to save and play all or any part of 
a sound file. Merge files or split into pieces. Record, edit, and save files; change playback/record speed. 
Convert mono to stereo and vice-versa! Record and play requires I/O board, cable, and audio equipment. 

MM/1 SOUND CABLE $10.00 - Connects MM/I sound port to stereo equipment for recording and play- 
back. 

GNOP $5.00 - Award winning version of PONG{tm) exclusively for the MM/I , You'll go crazytrying to 
beat the clock and keep that @#$%& ball in line! Professional pongists everywhere swear by (at) it! Requires 
MM/ 1 , mouse, and lots of patience. 

CoCo Products (DECB) 
HOME CONTROL $20.00 - Put your old TRS-80 Color Computer Plug n' Power controller back on the 
job widi your CoCo3! Control up to 256 modules, 99 events! Compatible with X-IO modules. 

HI & LO RES JOYSTICK ADAPTER $27.00 - Tandy Hi-Res adapter or no adapter at the flick of a 
switch! No more plug and unplugging of the joystick! 

KEYBOARD CABLE $25.00 - Five foot extender cable for CoCo 2 and 3. Custom lengths available. 

MYDOS $15.00 - Customizable, EPROMable DECB enhancement. The commands and options Tandy !el^ 
out! Supports double sided and 40 track drives, 6ms disk access, set CMP or RGB palettes on power-up. 
come up in any screen size. Speech and Sound Cartridge support, point and click mouse directory, and MORE 
OPTIONS than you can shake a stick at! Requires CoCo3 and DECB 2.1. 

DOMINATION $18.00 - Multi-Player strategy game. Battle other players armies to take control of the 
planet. Play on a hi-res map, Become a Planet-Lord today! Requires CoCo3, disk drive, and joystick or 
mouse. 



SMALL GRAFX ETC. 

"V and 'TRI" cables. Special 40 pin male/female end connectors, 

priced EACH CONNECTOR - $6.50 

Rainbow 40 wire ribbon cable, per foot - $ 1 .00 

Hitachi 63B09E CPU and socket - $13.00 

MPI Upgrades for all small MPIs (satellite board) - $10.00 

Serial to Parallel Convertor with 64K buffer 

and external power supply - NOW ONLY $28.00!!! 

Serial to Parallel Convertor (no buffer) 

and external power supply - ONLY $18.00!!! 

2400 baud Hayes compatible external modems - $15.00 

Serial to Parallel Convertor or 

Modem cable (4 pin to 25 pin) - $5.00 

ADD $3.00 SifeH FOR FIRST ITEM, $L00 EACH ADDITIONAL ITEM 

SERVICE, PARTS, & HARD TO FIND SOFTWARE WITH COMPLETE 
DOCUMENTATION AVAILABLE. INKS & REFILL KITS FOR CGP-220, 
CANON, & HP INK JET PRINTERS, RIBBONS & vr. 6 EPROM FOR CGP- 
220 PRINTER (BOLD MODE), CUSTOM COLOR PRINTING. 



Terry Laraway 

41 N.W. Doncee Drive 

Bremerton, WA 98311 

360-692-5374 



10870fp5 idd See get start address of buffer 


10880 


addd fndloc add last "found at" offset 


10890 mtlp4 tfr d,ynow try to match from new address 


10900 


tst mtcfig 


10910 


bne mttp2 


10920 mtlp3 ldx#mtctrg point to target buffer 


10930 


cir splits 


10940 


leau ,y update buffer address 


10960 nntlp2 cmpy #eiobuf are we past end of 




1 sector buffer? 


10960 


bhs fdwdsO yes?; then advance 1 sector 


10970 


cIr mtcfig clear match flag; ie. no match 


10980 


Ida ,x+ 


10990 


cmpa,y+ 


11000 


bne mtlp3 


11010 


com mtcfig 


11020 


cmpxendmtc end of target buffer? 


11030 


beq gotit 


11040 


bra mtlp2 


nosobadfnd Idxzero 


11060 


stx mtctrk 


11070 


stx fndloc 


11080 


clr mtcfig 


11090 


rts 


mooreadsc Ida #2 


miOsta Sea 


11120tst$ed 


11130b 


Tii bdread 


11140lbsr diskon 


insobeq xread 


meobdread Ida maxsec 


11170sta $ed 


11180bread2 cira 


11190leas 2,s 


11 200 xread rts 


11210 




11220* 


now calculate markers for tables 


11230gotitlda Sed 


11240 


anda #$7f remove possible flag 


11250 


sta Sed 


11260 


tfr u,d reg.U = location in dskcon buffer 


11270 


subd See 


11280 


stb fndloc+1 sector offset for find 


11290 


clr fndloc 


11300 


Idd Sec 


11310 


cmpb#1 


11320 


beq gt1 


11330 


decb 


11340 


tst splits 


11350 


beq mark 


11360 


decb 


11370 


bra mark 


11380gt1 deca 


11390 


Idb maxsec 


11400 


tst splits 


11410 


beq mark 


11420 


decb 


11430markstd mtctrk 


11440 


std track 


11450 


Ibsr cicgrn 


11460 


tst opnfig 


11470 


beq mark2 


11480 


ldx$928 


11490 


Idd 7,x 


11500 


subd #1 


11510 


tst splits 


11520 


beq mark3 


11530 


subd #1 


11 540 marks std recnum 


11550 


std frcnum 


11560 


Ibsr ssecO 


11570mark2 Ibsr screen show correct sector data 


11580 


ldx#hextbl 


11590 


stxhexloc 


11600 


Ida #asctbl 


11610 


sta ascloc 


11620 


Idb fndloc+1 


11630 


Ida rownum 


11640 


deca 


11650mklp1 inca divide reg.B by 16 


11660 


subb#$10 


11670 


bcc mklpl 


11680 


sta rownum 


11690 


addb #$10 


11700 


pshs b 


11710 


Ida #hexcel size 


11720 


mul 


11730 


addb hexloc 



page 14 the worid of 68' micros 



11740 stb hexloc 

11750 Ida ascloc 

11760 adda ,s+ 

11770 sta ascloc 

11780 Idb rownum 

11790 jsr locate 

11800 Ibsr flipcl 

11810 jsriocate 

11820 Idd hexloc 

11830 jsriocate 

11840 idd #22 

11850 jsriocate 

11860 Ibsr normcl 

11870 Ibra endchk 

11880 

1 1 890 fndmsg fee /BREAK toggles hexadecimal 

byte vrs. ASCII string/ 
11900 fob CR,0 

11 91 fndh fee /Search byte string: $/ 
11920 feb 

1 1 930 fnds fee /Search character string: / 
11940 feb 
1 1 950 keys feb $c up arrow 
11960 fdb moveup 
11970 feb $0a down arrow 
11980 fdb moved n 
1 1 990 feb $09 right arrow 
1 2000 fdb movert 
12010 feb $08 left arrow 
12020 fdb movelf 
12030 feb CR 
12040 fdb endedt 
12050 feb 
12060 fdb edinp edit input 
12070 

12080 endedt cir color remove reversed color from 
display 

12090 Ibsr eddisp 

12100 Idd #$c5e normalize CLEAR & up arrow 
12110 stb $a26e 
12120 sta $a27e 
12130 Idx#$ed84 enable cursor 
12140 stx$f812 
121 50 endchk orcc #1 
12160 rts 
12170 

12180 edtmsg fee /ENTER exits Edit CLEAR = 
ASCII uparrow/ 
12190 feb 
12200 

12210 edit tstopnfig 
1 2220 beq a@ 
12230 ldx$ee 
1 2240 empx feblst 
1 2250 bne a@ 
12260 tstlstsec 
12270 bne endchk 

12280a@ ldx#$1212 prevent cursor generation 
12290 stx$f812 

12300 Idd #$c5e swap CLEAR & up arow 
12310 sta $a26e 
12320 stb $a27c 
12330 Idd #22 
12340 jsriocate 

12350 leax fndmsg-1, per print Edit messages 
12360 jsr prints 
12370 leax edtmsg- 1, per 
12380 jsr prints 

12390 tplefttdu $ee sector buffer begin edit 
1 2400 ldx#hextbl row column 
12410 stxhexloc 

12420 Ida #asctbl column only; row same as 
hex. section 
12430 sta ascloc 
12440 revbyt com color 
12450 bsr eddisp 
12460 edinp Idd hexloc 
12470 tst hexflg are we changing hex. section or 
aseii? 

1 2480 beq hexin 

12490 Ida ascloc if hex, adjust x location 
12500 hexin jsriocate move cursor 
1 2510 tst hexflg what type of input do we need? 
12520 bne inchr 
12530 bra mbyte 
12540 

12550 eddisp Idd hexloc 
12560 jsriocate 



12570 tst color 

12580 beq eddsp2 

12590 Ibsr flipcl make reverse 

1 2600 eddsp2 Idd hexloc 

12610 jsriocate 

12620 Ida ,u 

12630 Ibsr hexprt 

12640 Ibsr normet make normal 

12650 Ida ascloc 

12660 Idb hexloc+1 

12670 jsriocate 

12680 tst color 

1 2690 beq eddsp3 

12700 Ibsr flipcl make reverse 

12710 eddsp3 Ida ,u 

12720 Ibsr ascprt 

12730 Ibra normcl make normal 

12740 

12750 check pshs a,x test for special edit keys 

12760 leax keys, per 

12770 chkip Ida ,x+ 

12780 beq gokey 

12790 cmpa,s 

12800 beq gokey 

12810 leax 2,x 

12820 bra chkIp 

12830 gokey leas 3,s 

12840 jmp [,x] 

12850 

12860 inchr bsr read1 

12870 cmpa#' 

12880 bio check 

12890 sta ,u 

12900 Ibsr flipcl make revers 

12910 jsrscrprt 

12920 Ibsr normcl make norma) 

1 2930 bra movert 

12940 

12950 inbyte bsr read1 

12960 sta iol 

12970 Ibsr hexbin 

12980 Ida Iol 

1 2990 bcs check 

13000 bsr inbyt2 

13010 bsr read1 

13020 sta io2 

13030 Ibsr hexbin 

13040 Ida io2 

13050 bcs check 

13060 bsr inbyt2 

13070 Idd iol 

13080 Ibsr hxDbin 

13090 sta ,u 

13100 bra movert 

13110inbyt2 Ibsr flipcl make reverse 

13120 jsrscrprt 

13130 Ibra normcl make normal 

13140 

13150 readi Ibsr flipcl 

13160 jsrgetchr 

13170 Ibsr normcl 

13180 cmpa#3 

13190 bne enread 

13200 com hexflg 

13210 leas 2,s 

13220 Ibra edinp 

13230 enread rts 

13240 

1 3250 movert Idd hexloc 

1 3260 jsr locate 

13270 cIr color 

13280 Ibsr eddisp 

13290 teau 1,u 

1 3300 tst opnflg 

13310 beq dspyrt 

1 3320 tst tstsec 

13330 beq dspyrt 

13340 cmpu feblst 

13350 bio dspyrt 

13360 Ibra tpleft 

13370 dspyrt inc ascloc 

13380 Ida ascloc 

13390 cm pa #74 

13400 bhs rowdn 

13410 Ida hexloc 

1 3420 adda #hexcel size 

1 3430 sta hexloc 

13440 Ibra revbyt 



13450 rowdn inc rownum 

13460 Ida rownum 

13470 cmpa#i8 

13480 Ibhl tpleft 

13490 Idd #5*$1 00+58 

1 3500 sta hexloc 

13510 stb ascloc 

13520 Ibra revbyt 
13530 

1 3540 movelf Idd hexloc 

13550 jsriocate 

13560 cIr color 

13570 Ibsr eddisp 
13580 mvtf2 leau -l,u 

13590 dec ascloc 

13600 Ida ascloc 

13610 cmpa#58 

13620 bio rowup 

13630 Ida hexloc 

13640 suba #hexcel size 

1 3650 sta hexloc 

13660 bra mvlf3 
13670 rowup dec rownum 

13680 Ida #50 

1 3690 sta hexloc 

13700 Ida #73 

13710 sta ascloc 

13720 Ida rownum 

13730 cmpa#3 

13740 blo gobot 

1 3750 bra mvlf3 
13760 gobot Ida #18 

13770 Sta rownum 

13780 leau $100,u 
1 3790 mvlf3 tst opnflg 

13800 beq Ifdone 

13810 tstlstsec 

1 3820 beq Ifdone 

13830 cmpu feblst 

13840 bhs mvlf2 
13850 Ifdone Ibra revbyt 
13860 

13870 moveup Iddhexloc 

13880 jsriocate 

13890 cIr color 

13900 Ibsr eddisp 

13910 leau -$10,u 

13920 dec rownum 

13930 Ida rownum 

13940 cmpa#3 

13950 bhs updone 

13960 leau $100,u 

13970 Ida #18 

13980 sta rownum 

1 3990 tst opnflg 

14000 beq updone 

14010 tstlstsec 

14020 beq updone 
14030 mvup3 cmpu feblst 

14040 blo updone 

14050 dec rownum 

14060 leau -$10,u 

14070 bra mvup3 
14080 updone Ibra revbyte 
14090 

14100 mo vedn Idd hexloc 

14110 jsriocate 

14120 el r color 

14130 Ibsr eddisp 

14140 leau $10, u 

14150 inc rownum 

14160 tstopnfig 

14170 beq mvdn2 

14180 tstlstsec 

14190 beq mvdn2 

14200 cmpu feblst 

14210 blo mvdn2 

14220 Ida rownum 

14230 bra mvdnS 
14240 mvdn2 Ida rownum 

14250 cmpa#18 

14260 Ibis revbyt 
14270 mvdn4 leau -$100, u 

14280 Ida #3 

14290 sta rownum 

14300 ibra revbyt 

continued on page 19 

the world of 68' micros page 15 



Adventures in Assembly, Part 1 Art Fiexser 

Some assembly excercises and solutions by the creater of ADOS. 



Here is an exercise in assembly lan- 
guage programming. It is afl very well to 
read these tutorials and assemble the 
programs that go with them, but to learn 
assembly language, it is also necessary 
to practice writing programs by yourself. 
So, here's something to get you started. 
The "answers" are in the files 
TUTA1A.SRC and TUTA1B.SRC, with 
some commentary following the listings. 
But I encourage you to not look at these 
until you've had a whack at doing it your- 
self. Practice makes perfect! 

Exercise #1 

Write a program that wilt clear the 
screen with a particular color when you 
type the initial of the name of that color. 
When the screen has been cleared, the 
program should loop back to the begin- 
ning and await another color key. Keys 
that are not color initials should be ig- 
nored, except for the break key, which 
should cause the program to exit to BA- 
SIC. Since some colors share the same 
initial, we'll use the following as our color 
codes: 

X = black ($80) 
G = green ($8F) 
Y = yellow ($9F) 
B = blue ($AF) 
R = red ($BF) 
W = buff ($CF) 
C = cyan ($DF) 
M = magenta ($EF) 
O = orange ($FF) 

For an additional challenge, see if you 
can make the program work properly re- 
gardless of whether the input is in lower 
or upper case. It is possible to accom- 
plish this with just a single added instruc- 
tion (an AND instruction, if you must 
know!) 

Exercise #2 

This is not really a separate program- 
ming problem, but rather a more sophis- 
ticated approach to solving #1 than the 
most straightfonward one. The straight- 
foHA/ard approach to #1 involves using 9 
separate CMPA #<byte value> instruc- 
tions, one to check for each possible color 
key. This approach is shown in 
TUTA1A.SRC. It works very nicely when 
there are only 3 or 4 keys to be scanned 
for, but gets a bit cumbersome when 
there are more. The program in 



TUTA1A.SRC has a lot of repetitious 
code in it, and, as in Basic programming, 
that should hint that a more efficient pro- 
gramming approach may be called for. 
So, see if you can write a program that 
accomplishes the same thing as de- 
schbed in #1 , but which uses a lookup 
table containing pairs of bytes instead of 
multiple CMPA instnjctions. The first byte 
of each pair will be the ASCII value for 
the color name initial, and the second will 
be the byte that the screen will get filled 
with to produce that color. One advan- 
tage of this approach is that the program 
can very easily be modified to define a 
new key and the screen fill byte that goes 
with it, just by adding an additional pair 
of bytes to the lookup table. To allow 
maximum flexibility, do not have the pro- 
gram assume that the lookup table con- 
tains any fixed number of entries. Rather, 
just have the program look for a byte 
value of zero to tell it when it has come 
to the end of the lookup table (such a byte 
Is referred to as a "terminator"). 
TUTA1B.SRC contains a program that 
uses this approach. 

00100 *TUTA1A.SRC 

00110 *ARTFLEXSER 

00120 ORG $3000 

001 30 *FILLS SCREEN WITH APPROPRIATE 

COLOR WHEN KEY IS 

001 40 ^PRESSED THAT IS THE INITIAL OF 

THE COLOR NAME 

001 50 START JSR [$A000] GET 

KEYPRESS 

00160 BEQ START LOOP IF NO KEY 

PRESSED 

00170 CMPA #3 BREAK KEY? 

00180 BEQ EXIT YES, RTS 

00190 ANDA #$DF ENSURE 

UPPERCASE 

00200 CMPA #'X BLACK? 

00210 BNE GRN 

00220 LDA #$80 

00230 BRA FILSCR 

00240 GRN CMPA #G GREEN? 

00250 BNE YELO 

00260 LDA #$8F 

00270 BRA FILSCR 

00280 YELO CMPA #'Y YELLOW? 

00290 BNE BLUE 

00300 LDA #$9F 

00310 BRA FILSCR 

00320 BLUE CMPA #*B BLUE? 

00330 BNE RED 

00340 LDA #$AF 

00350 BRA FILSCR 

00360 RED CMPA #'R RED? 

00370 BNE BUFF 

00380 LDA #$BF 

00390 BRA FILSCR 

00400 BUFF CMPA #'W BUFF? 

00410 BNE CYAN 



00420 LDA #$CF 

00430 BRA FILSCR 

00440 CYAN CMPA #'C CYAN? 

00450 BNE MAG 

00460 LDA #$DF 

00470 BRA FILSCR 

00480 MAG CMPA #'M MAGENTA? 

00490 BNE ORNG 

00500 LDA #$EF 

00510 BRA FILSCR 

00520 ORNG CMPA #'0 ORANGE? 

00530 BNE START NO, GET 

ANOTHER KEY 

00540 LDA #$FF 

00550 *F1LL SCREEN WITH BYTE VALUE IN 

A REGISTER 

00560 FILSCR LDX #$400 

00570 TFR A,B 2 BYTES ATA TIME 

00580 L00P1 STD ,X++ 

00590 CMPX #$600 

00600 BLO L00P1 

00610 BRA START DONE, GET NEW 

KEY 

00620 EXIT RTS EXIT ON BREAK 

KEY 

00630 END START 



00100*TUTA1B.SRC 

00110*ARTFLEXSER 

00120 ORG $3000 

001 30 *FILLS SCREEN WITH APPROPRIATE 

COLOR WHEN KEY IS 

00140 ^PRESSED THAT IS THE INITIAL OF 

THE COLOR NAME 

001 50 START JSR [SAOOOJGET 

KEYPRESS 

00160 BEQ START LOOP IF NO KEY 

PRESSED 

00170 CMPA #3 BREAK KEY? 

00130 BEQ EXIT YES, RTS 

00190 ANDA #$DF ENSURE UPPER 

CASE 

00200 LEAX TABLE, PCR X=START 

OF TABLE 

00210 LOOP CMPA ,X CHECK KEY 

AGAINST TABLE ENTRIES 

00220 BEQ FILSCR FILL SCREEN IF 

FOUND 

00230 TST ,X++ END OF TABLE? 

00240 BEQ START YES, NOT IN 

TABLE, GET NEW KEY 

00250 BRA LOOP NO, CHECK 

NEXT TABLE ENTRY 

00260 EXIT RTS ADIOS.AMIGO 

00270 FILSCR LDB 1 ,X GET COLOR 

BYTE VALUE 

00280 LDX #$400 START OF 

SCREEN 

00290 L00P1 STB ,X+ PUT COLOR 

ON SCREEN 

00300 CMPX #$600 END OF 

SCREEN? 

00310 BLO LOOP1 NO, CONTINUE 

00320 BRA START YES, GET NEW 

KEYPRESS 

00330 *TABLE OF 2-BYTE ENTRIES 

00340 * 1 ST BYTE IS COLOR INITIAL 

00350 * 2ND BYTE IS THE SCREEN DISPLAY 

VALUE FOR THE COLOR 



page 16 the world of 68' micros 



00360 TABLE FCB X BLACK 



00370 


FCB 


$80 




00380 


FCB 


G 


GREEN 


00390 


FCB 


$8F 




00400 


FCB 


Y 


YELLOW 


00410 


FCB 


$9F 




00420 


FCB 


*B 


BLUE 


00430 


FCB 


$AF 




00440 


FCB 


R 


RED 


00450 


FCB 


$BF 




00460 


FCB 


W 


BUFF 


00470 


FCB 


$CF 




00480 


FCB 


C 


CYAN 


00490 


FCB 


$DF 




00500 


FCB 


M 


MAGENTA 


00510 


FCB 


$EF 




00520 


FCB 





ORANGE 


00530 


FCB 


$FF 




00540 


FCB 





TERMINATOR 


00550 


END 


START 



Comments on TUTA1 A.SRC 
Line 190 ANDA#$DF 

This instruction converts any lowercase 
input to uppercase. Lowercase letters 
have ASCII values starting with "a"=$61 ; 
uppercase letters start with "A"=$41 . The 
difference between the ASCII codes for 
the upper and lowercase versions of the 
same letter Is that the lowercase version 
has bit 5 equal to 1 and the uppercase 
version has this bit equal to 0. 

The individual bits of an 8-bit byte are 
numbered 0-7, starting with the bit at the 
right. Thus, a bit's number corresponds 
to the power of two that that bit position 
represents. 

76543210 bit 

"A" = $41 =%01 000001 

"a" = $61 =%01 100001 

Note that the percent sign is used to 
signify a binary quantity. Some assem- 
blers, though unfortunately not Edtasm+, 
will accept this notation. 

(editor: Thus the easy explanation for 
bits and bytes ~ a single byte is one char- 
acter on the screen, so megabyte is a 
million characters on the screen, etc. 
Good explanation for novices!) 

When you AND two binary quantities 
(call them M and N) together, each bit 
position of the result P is determined 
solely by the bit values in the corespond- 
ing bit positions of M and N. Bit 3 (say) of 
P will be a one if and only if Bit 3 of M 
AND Bit 3 of N are BOTH one. Looking 
at each bit position separately, we can 
then say that if we AND a particular bit 
position with a 0, the result must have a 
zero in that bit position, regardless of 
whether the original bit value in that posi- 
tion was a one or a zero. (1 AND 0) = 0; 
(0 AND 0) = 0. Also, if we AND a bit po- 
sition with a one, its value will be un- 
changed. (0 AND 1 ) = 0; (1 and 1 ) = 1 . 

What good is all this? It allows us to 



reset a particular bit position to a zero 
while preserving ail of the other seven bit 
positions unchanged, which is exactly 
what we need to convert lowercase to 
uppercase input. That is. if we AND the 
ASCII value of the keypress with 
%1 1 011111 (=$DF),wewill force Bit 5 to 
assume a value of zero while leaving the 
other bits alone. So, by inserting an ANDA 
#$DF instruction, we can then allow sub- 
sequent instructions of the program to 
check only for the uppercase forms of 
the letters. Incidentally, the AND opera- 
tor works exactly the same in Basic. Try 
this little one-liner, which converts an in- 
put letter to uppercase: 

10 INPUT A$:?CHR$(ASC(A$) AND 
&HDF):GOTO10 

While we are on the subject, the OR 
operator is pretty much the mirror image 
of AND. If you OR a bit with a 1 , the re- 
sult is a 1. (0OR1) = 1; (10R1) = 1. 
But if you OR a bit with a 0, you preserve 
its value: (0 OR 0) = 0; (1 OR 0) = 1 . So, 
if you have a need to force a particular 
bit position to be a one, you do this by 
ORing with a quantity that consists of 
zeroes in all bit positions except the criti- 
cal one. Thus, for example, to force low- 
ercase instead of uppercase, which in- 
volves setting Bit 5 to a one, we would 
use an ORA #%001 00000, (or ORA 
#$20, in language that Edtasm+ under- 
stands). Incidentally, forcing a particular 
bit to be 1 or is called SETTING it or 
RESETTING it, respectively. 

Lines 560-610 

These lines contain the routine that fills 
the screen with the desired byte value. 
Note that in this version, a TFR A,B in- 
stnjction is used to duplicate the contents 
of the A register into the B register. Thus, 
if A contained $80, the D register, which 
consists of the A and B registers taken 
together and considered as a 1 6-bit quan- 
tity, would contain $8080. Copying A into 
B allows use to use a STD, X++ instruc- 
tion to fill the screen two bytes at a time, 
which is faster than if we had used a STA 
,X+ instruction. 

Comments on TUTA1B.SRC 
Line 200 LEAX TABLE,PCR 

This instruction does the same thing as 
LDX #TABLE, as far as what value gets 
put into the X register. However, the 
LEAX TABLE,PCR form allows the pro- 
gram to be RELOCATABLE. That is, it 
will still work properly if we load it in with 
an offset (PCR stands for "position 
counter relative", by the way). TABLE, in 
this program, is at location $3029, which 



happens to be $1 9 bytes beyond the byte 
that follows the LEAX TABLE.PCR in- 
struction (I can tell this by looking at my 
assembled printout, produced by A/LP/ 
NO. and seeing that the LEAX instruc- 
tion translated to a sequence of bytes 
ending with a $19). 

The difference between the LDX 
#TABLE form and the LEAX 
TABLE. PCR form is that LDX #TABLE 
means that TABLE will be considered as 
being located at $3029, regardless of any 
offset that is used in loading the program, 
while LEAX TABLE, PCR means that 
TABLE is considered to be located $19 
bytes beyond the start of the instruction 
that follows the LEAX. The latter loca- 
tion will be at $4029 instead of $3029 if 
we offset load the program by $1000 so 
that it loads in at $4000. A relocatable 
program will assemble to produce the 
same sequence of bytes, regardless of 
any ORG statement that is included with 
the source, so that the program will be 
equally happy anyplace in memory. It is 
a good idea to get into the habit of writ- 
ing programs that are relocatable, since 
it is so easy to do, thanks to the structure 
of the 6809's instruction set. Use BRA 
and BSR instead of JMP and JSR to pre- 
serve relocatability, if the address you 
wish to jump to is not a fixed one, such 
as a ROM call. 

Line270LDB1,X 

This instruction says to load the B reg- 
ister with the byte that is in the address 
one beyond that pointed to by the X reg- 
ister. That is, if X contains $4000, B is 
loaded with the contents of location 
$4001 . The value of X is not changed by 
this instruction, but is left at $4000. In the 
program, X points to the ASCII value of 
a letter— the first byte of one of the pairs 
of bytes that make up the lookup table. 
LDB 1 ,X will therefore load B with the 
color byte that follows the ASCII code — 
the second byte of the con-esponding byte 
pair. It is important to keep straight the 
difference between LDB 1,X and LDB 
,X+. The latter instruction (if X = $4000) 
will load B with the contents of address 
$4000. and then change the X register 
so that it contains $4001 . In the program, 
the incrementing of X to point to the next 
byte pair is taken care of by the TST ,X++ 
instruction in line 230. 
This instmction also 
checks for the zero 
terminator at the end \ 
of the lookup table. 




the world of 68' micros page 17 





BY ERIC 
STRIKER 



This simple BASIC game puts the Tandy Speech/Sound Cartridge (SSC) to work if you have one! Those familiar with 
the SSC will realize the "misspellings" are intentional as the cartridge "speaks" phoneticly. So spelling has to be 
"adjusted" to get the desired sounds. A good excercise in using the SSC in BASIC programs. 



1REMR0B0TZAP V1.02 

2 REM BY ERIC STRIGER 1986 
5 PCLEAR4:PMODE4.1:SCREEN1,1: 
SCREENO,0: CLS0:PCLS1 

9 REM CLEAR STRING SPACE 

10 CLEAR1000:DIM MAP(32,19). FE(16), 
RB(16),MN(16),MI(16),EX(16) 

11 REM VARIBLE TABLE 
14 REM SC=SCORE 
15SC=0 

19 REM HS=HIGH SCORE 
20HS=1000 

24 REM BS$=BLACK SPACE & 
DS$=DOUBLE BLACK SPACE 

25 BS$=CHR$(128);DS$=BS$+BS$ 

29 REM LV=LEVEL 

30 LV=1 

34 REM NM=NUMBER OF MEN 

35 NM=3 

50 ROB$="U3L2U3R3U2LU3R3D3L2D2 

R3D4L2ND3L3Er 

55 MAN$="E3NF3U4NF2NHNG3UNRU" 

60 FEN$="U4NRNLU2NE3NH3U3" 

65 M1N$="NR2NL2NU3NE3NH3" 

70 EXIT$="NR3U3NR2U3R3" 

74 REM REMOVE REMARK IF YOU 
HAVE RS-SPEECH AND SOUND PACK 

75 V=&HFF00:V1=&HFF7E;V2=-1 
90 GOSUB 700:IF V2=-1 THENA$= 
'ROWBOT ZAP":GOSUB955:FORT=1TO 
100:NEXTT 

95 PU\rV31T10O1L4CL200O4BA#AG 
#AG#FEE-DC03BA#AG#GF#FEE-DC0 
2BA#AG#GF#FEE-DC#C02BA#AG#GF 
#FEE-DC#C01BA" 

96 B$=" PREPAIR FOR BATTAL 



99 NM=3:LV=1 

100 REM TITLE SCREEN 

105 CLS0:A$="BY ERIC STRINGER 

1986 PRESS ANY KEY TO BEGIN 

*INSTRUCTIONS HIT '@' * ":SC=0 

110 PRINT@0,STRING$(32.CHR$(143+ 

RND(7)*16));:PRINT@64.STRING$(32,CHR$(143+ 

RND(7)*16));:PRINT@32,USING"SCORE 

###### HIGHSCORE ######";SC.HS 

115C1=(RND(8)-1)*16 

120 PRINT@96,DS$;STRING$(4,CHR$ 

(131+C1));DS$;STRING$(4.CHR$(131-k:1));DS$; 

STRING$(4.CHR$(131+C1));DS$;STRIN 

G$ (4.CHR$(131+C1));DS$;STRING$(4, 

CHR$(131+C1)); 

125 PRINT@128,DS$;CHR$(143+C1); 

DS$; BS$:CHR$(138+C1);BS$;CHR$(143 

+C1);DS$;CHR$(143+C1);DS$;CHR$(143 

+C1);DS$;BS$; CHR$(138+C1);BS$;CH 

page 18 the worid of 68' micros 



R$ (143+C1);DS$;CHR$ (143+C1);DS$; 

BS$;CHR$(133+C1);CHR$(138+C1);DS$; 

130 PRINT@160,DS$;CHR$(143+C1); 

DS$;BS$;CHR$(138+C1);BS$;CHR$(143+ 

C1); DS$;CHR$(143+C1); DS$;CHR$(143 

+C1);DS$;BS$;CHR$(138+C1);BS$;CHR$ 

(143+C1);DS$;CHR$(143+C1);DS$;BS$; 

CHR$(133+C1);CHR$(138+C1);DS$; 

135 PRINT@192.DS$;CHR$(143+C1);*ST 

RING$(3,CHR$(140+C1));CHR$(130+C1); 

BS$;CHR$(143+C1);DS$;CHR$(143+C1); 

DS$;CHR$(1 43+C 1 ) ;STRING$(3,CHR$(1 40+ 

C1));CHR$(130+C1);BS$;CHR$(143+C1);DS$; 

CHR$(143+C1);DS$;BS$;CHR$(133+C1);CHR$ 

(138+C1); 

140 PRINT@224,DS$;CHR$(143+C1);DS 
$; BS$;CHR$(138+C1);BS$;CHR$(143+C 
1);CHR$(131+C1):CHR$ (131+C1);CHR$ 
(143+C1);DS $;CHR$(143+C1);STRING$ 
(3,CHR$(131+C1));CHR$(136+C1);BS$: 
CHR$(143+C1);CHR$(131+C1);CHR$(131 + 
C1);CHR$(143+C1);DS$;BS$;CHR$(133+C1); 

141 PRINTCHR$(138+C1);:PLAY"C01BA" 
145 PRINT@256,STRING$(8.CHR$(128 
));STRING$(4,CHR$(131+C1));DS$;CHR$ 
(129+C1);CHR$(131+C1);CHR$(131+C1); 
CHR$(130K;i);DS$iSTRING$(4.CHR$(131-K:i)); 
150 PRINT@288,STRING$(11.CHR$(128 
));CHR$(134+C1);DS$;CHR$(143+C1);DS$; 
CHR$(133+C1);DS$;CHR$(143+C1);DS$; 
BS$:CHR$(138+C1); 

155 PRINT@320,STRING$(10.CHR$(128 

));CHR$(134+C1);DS$;BS$;CHR$(143+C1); 

STRING$(2.CHR$(131+C1));CHR$(135+C 

1);DS$:CHR$(143+C1);STRJNG$(3,CHR$(1314C1)); 

CHR$(136+C1); 

160 PRINT@352,STR!NG$(9,CHR$(128 

));CHR$(134+C1);DS$;DS$;CHR${143+C1); 

DS$;CHR$(133+C1);DS$;CHR${143+C1); 

165 PRINT@384,STRING${8,CHR$(128 

));CHR$(135+C1);STRING$(3,CHR$(131+C1)); 

DS$;CHR$(143+C1);DS$;CHR$(133+C1); 

DS$;CHR$(143+C1); 

170PRINT@416.STRING$(32,CHR$(143+ 

RND (7) *16));175A$=RIGHT$(A$.LEN(A 

$) -2)+LEFT$(A$.2):PRINT@448,LEFT$( 

A$,32); 

180 C2-RND(7)*16:PRINT@480, STRING 

$(31 .CHR$(143+C2));:POKE1024+51 1 .143K;2 

185 l$=INKEY$:IF 1$="®" THENGOSUB 

1000:GOTO110ELSEIFI$=""THEN110 

190 GOSUB200:GOSUB800 

195 GOTO 300 

200 REM DISPLAY SCORE AND LEVEL 

205 CLSO 

210FORZ=1 TO 25 



215 PRINT@0,STRING$(32,CHR$(143+ 

RND (7ri6)); 

220 PRINT@32,USING"SCORE ###### 

HIGHSCORE ######";SC,HS;:PRINT@ 

64,STRING$(32,CHR$(143+RND(7)*16)): 

225 PRINT@224,STRING$(32,CHR$(143 

-hRND (7)*16)); 

230 PRINT@256.STR1NG$(32,CHR$(143 

+RND(7)*16));:PRINT@256+12.USING"LEVEL 

##";LV; 

235 PRINT@288,STRING$(32.CHR$ (143 

+RND(7ri6)); 

240 PRINT@320,STRING$(32,CHR$(143 

+RND(7ri6));:PRINT@320+12.USING"MEN 

##";NM; 

245 PRINT@352,STRING$(32,CHR$(143 
+RND(7)*16)); 

246 B$=RIGHT$(B$,LEN(B$)-2)+LEFT$(B 
$,2):PRINT@384,LEFT$(B$,32);STRING$(32, 
CHR$(143+RND(7ri6)); 

250 NEXT Z:RETURN 

300 REM MAIN GAME CONTORL 

305 JX==JOYSTK(0):JY=JOYSTK(1):PK= 

PEEK (65280) 

310 IF JX<20 THEN PX=PX-1 

315 IF JX>42 THEN PX=PX+1 

320 IF JY<20 THEN PY=PY-1 

325 IF JY>42 THEN PY=PY+1 

329 REM UP DATE MAN POSITION 

330 GOSUB 400 

334 REM UP DATE ROBOT POSITION 

335 GOSUB 500 

340 T=D(1)+D(2)+D(3)+D(4)+D(5):IF T=0 

THENQ=5:GOTO600 

345 IF SC>HS THEN HS=SC 

390 GOTO 300 

400 REM MAN POSITION UP DATE 

405 IF MAP(PX.PY)=4 
THENQ=1:GOTO600 ELSE IF MAP(PXP 
Y)=30RMAP(PX.PY)=1THENQ=3:GOTO 
600 ELSE IF MAP(PX.PY)=6 THEN Q=2: 
GOTO600 ELSE IF MAP(PX,PY)=2 THEN 
Q=4:G0T0 600 

406 MAP(OX.OY)=0:MAP(PX,PY)=5 

410 COLOR 1,1:LINE((OX-1)*8.(OY-1)*10 
+10)-((OX-1)*8+8,(OY-1)*10).PSET,BF 

415 PUT((PX-1 )*8,(PY-1 )*1 0+1 0H(PX-1 ) 
*8+8,(PY-1)*10).MN.PSET 

416 IF PK=126 OR PK=254 THEN 430 
420 OX=PX:OY=PY:RETURN 

430 REM DROP MINE 

435 MAP(OX,OY)=6;PUT{(OX-ir8,(OY- 

1)*10+10H(OX-1)*8+8.(OY-1)*10),MI, 

PSET 

440 GOTO 420 

500 REMAN ROBOT UPDATE 



505 FOR Z=1 TO 5 

509 IF RND(INT(10/LV))=1THEN510 
ELSE NEXTZ:RETURN 

510 IF D(Z)=0 THEN NEXT Z:RETURN 

511 LINE((PX(Z)-1)*8,(PY(Z)-1)*10+10)- 
((PX(Z)-ir8+8,(PY(Z)-iri0),PSET,BF 

512 MAP(PX(Z).PY(Z))=0 

515 PX(Z)=PX(Z)+rSGN(PX-PX(Z)) 
520 PY(Z)=PY(Z)+rSGN(PY-PY(Z)) 
525 IF MAP(PX(Z),PY(Z))=3 AND LV<3 
THENGOSUB550:NEXT Z:RETURN 
530 IF MAP(PX(Z),PY(Z))=6 THEN GO 
SUB 550:NEXTZ;RETURN 

535 IF MAP(PX(Z),PY(Z))=5 THEN 
Q=1:GOTO600 

536 PUT((PX(Z)-ir8,(PY(Z)-iri0+10H( 
PX(Z)-1)*8+8,(PY(Z)-1)*10),RB,PSET 

537 MAP(PX(Z).PY(Z))=4 
545 NEXT Z: RETURN 

550 SC=SC+50:MAP(PX(Z),PY(Z))=0:PL 

AY 'T1L255V3101ADCFABGEDV16ACG 

ADV4EABCAEDB":D(Z)=0:RETURN 

600 REM MAN KILLED RUTINE 

605 IF Q=1 THEN B$=" THEY GOT YOU 

!!!! ":NM=NM-1 

610 IF Q=2 THEN B$=" STEPED ON YO 

UR OWN MINE ":NM=NM-1 

615 IF 0=3 THEN B$=" ZAP !!! YOU HAV 
E BEEN ELECTROFIDE... ":NM=NM-1 
620 IF 0=4 THEN B$=" YOU HAVE ESC 
APE OUT AN EXIT..." 
625 IF Q=5 THEN B$=" YOU HAVE KILL 
ED ALL THE ROBOTS ON THIS LEVEL.. 
BONUS "'+STR$(LV*1 00)+".. ..":LV=LV+1: 
SC=SC+100*LV 

630 IF NM=0 THENB$=" *** GAME 

OVER *** ":GOSUB200:GOTO95 

635 IF V2=-1 THENA$=B$:GOSUB955 
645 IF SC>HS THEN HS=SC 
650 GOSUB200:GOSUB800 

698 SCREEN1,1:GOTO300 

699 END 

700 REM DRAW PICES 
705 PCLS1 

710 DRAWC0BM128,95;"+ROB$ 

715 GET(126,94H1 26+8,84). RB,G 

720 PCLS1:DRAWBM128,95;"+MAN$ 

725 GET(127,95)-(127+8,85),MN,G 

730 PCLS1;DRAWBM127.95;"+MIN$ 

735 GET(124,95)-(132,85).MI,G 

740 PCLS1:DRAWBM128.95;"+FEN$ 

745 GET(126.95)-(134,85),FE,G 

750 PCLS1:DRAW'BM128,95;"+EXIT$ 

755 GET(127,95)-(135.85),EX,G 

760 RETURN 

800 REM SETUP SCREEN FOR PLAY 

805 FORX=1T032:FORY=1T018:MAP(X, 

Y)=0:NEXTY,X 

810 PCLS1:POKE178,2:SCREEN1.1 

815 REM SET UP BOUNDREIS 

820 FOR X=0 TO 31 

825 IF RND(10)=5 THENMAP(X+1 ,0)=2: 

PUT(X+8*X,10)-(X+8+8*X.0),EX,PSET 

ELSE LINE(X+8*X.1 0)-(X+8+8*X.0).PSET 

.BF:MAP(X+1,1)=1 

830 IF RND(10)=5 THENMAP(X+1,19)=2: 

PUT(X+8*X,190)-(X+8+8*X,180),EX,PSE 



T ELSE MAP(X+1,19)=1:L!NE (X+8*X,19 

0)-(X+8+8*X,180),PSET,BF 

835 NEXT X 

840FOR Y=1 TO 17 

845 MAP(1.Y+1)=1:LINE(0,20+10*(Y-1))- 

(8,10+10*(Y-1)),PSET,BF 

850 MAP(32,Y+1)=:1:LINE(8*31,20+10*(Y 

-1))-(8*32.10+10*(Y-1)),PSET.BF 

855 NEXT Y 

860 REM PUT FENCES ON BORD 

865NF=10*LV 

870FORX=1 TONF 

875 X1=RND(32):Y1=RND(19) 

880 IF MAP(X1,Y1)<>0 THEN 875' 

885 MAP(X1 , Y1 )=3:PUT((X1 -1 )*8, 10+10* 

(Y1-1))-((X1-1)*8+8,(Y1-1)*10),FE,PSET 

890 NEXT X 

895 REM PUT ROBOTS ON SCREEN 

900 FOR X=1 TO 5 

905 X1=RND(32):Y1=RND(19) 

910 IF MAP(X1,Y1)<>0THEN 905 

915 MAP(X1,Y1)=4:PUT((XM)*8,10+10* 

(Y1-1))-({X1-1)*8+8,(Y1-1)*10),RB.PSET 

920 PY(X)=Y1 :PX(X)=X1 :D(X)=1 :UX(X)= 

X1:UY(X)=Y1 

925 NEXT X 

930 REM PUT THE MAN ON SCREEN 

935 X1=RND(32):Y1=RND(19) 

940 IF MAP(X1,Y1)<>0 THEN935 

945 MAP(X1,Y1)=5:PUT((X1-1)*8,10+10* 

(Y1-1))-((XM)*8+8,(Y1-1)*10),MN,PSET 

950 PX=X1:PY=Y1:0X=PX:0Y=PY: 

RETURN 

955 REM SPEECH OUTPUT 

956 POKEV+1,52:POKEV+3,63:POKEV+ 
35.60 

957 POKE65494,0 

960 FOR 1=1 TO LEN(A$) 

965 IF PEEK(VI) AND 128=0 THEN 965 

970 POKE V1,ASC(M1D$(A$,I,1)) 

975 NEXT I 

980 IF PEEK(VI) AND 128=0 THEN 980 

985 POKE V1,13:F0RT=1 TO30*LEN (A 

$):NEXTT:POKE65495,0:RETURN 

1000 REM INSTRUCTIONS 

1005 CLS1 

1010 PRINrUSEING RIGHT JOYSTICK 

KEEP AWAY FROM ROBOTS AND FEN 

CES AND WALLS." 

1015 PRINTTRESS FIRE BUTTON TO D 

ROP MINES." 

1020 PRINT-'E' ARE EXITS. BUT IF YOU 

EXIT YOU DONT ADVANCE A LEVEL." 

1025 INPUT-PRESS ENTER TO BEGAIN 

";N$:CLSO:RETURN 




ColorZap93 (continued from page 15) 

14310 mvdn3 leau $10,u 

14320 jnca 

14330 mvdnS cmpa#19 

14340 bne mvdnS 

14350 bra mvdn4 

14360 

14370 nonext coma 

14380 rts 

14390 next tstmtcfig 

1 4400 beq nonext 

14410 Idxzero 

14420 stxmtcflg clear match and split find 

14430 tstopnfig 

1 4440 bne nxinxt 

14450 Idxmtctrk 

14460 stxtrack 

14470 stxSec system track/sector 

14480 nxl2 Idxfndloc start search AFTER current 

match 

14490 leax 1,x 

14500 sbffndloc 

14510 I bra fndwds 

14520 nxinxt Idd frcnum 

14530 std recnum 

1 4540 bra nxl2 

14550 

14560 repkey tstrepflg 

14570 bne endrep 

14580 Ida dos 

14590 beq rpkl 

14600 deca 

14610 beq d1 

14620 deca 

14630 beq d1 

14640 bra norep 

14650 d1 Idx#$d8ce end of DOS 11 irq 

1 4660 bra rpk2 

14670 rpk1 Idx#$d7db end of D0S1 irq 

14680 rpk2leay REPEAT.pcr 

14690 Idu ,x 

14700 cmpu#$8955 

14710 bne norep 

14720 sty,x 

14730 com repfig 

14740 endrep coma 

14750 rts 

14760 norep leax repmsg-1,pcr 

14770 jsr prints 

14780 jsrgetchr 

14790 bra endrep 

14800 repmsgfcc /Sorry, can't help you with your 

current system./ 

14810 fob CR,0 

14820 

14830 opnmsg fee/Link to file: / 

14840 fcb 

14850 Ispn fee /A file is already open!/ 

14860 fcb 

14870 isopn leax ispn- 1, per 

14880 jsrphntS 

14890 jsrgetchr 

14900 orcc #1 

14910 badink rts 

14920 quitin andcc #.not,1 

14930 rts 

14940 link tstopnfig 

14950 bne isopn 

14960 leax opnmsg- 1, per 

14970 jsr prints 

14980 Ibsr linein 

14990 bcs quitin exit on BREAK 

15000 ldx#iinbuf+1 

15010 tst,x 

15020 beq dir 

15030 decb 

15040 leay xitopn.pcr 

15050 pshs y 

15060 clr,-s 

15070 Ida drive 

1 5080 sta $eb 

1 5090 ldy#$94c 

15100 pshs b 

15110 Idd #$200b 

15120 nmclr sta ,y+ erase file name area 

15130 decb 

the world of 68' micros page 19 



RGBeest- $15.00 

If you want to speed up DECB easily, 
install on Hitachi 6309 and get RGBoost. 
This patch for DECB uses the extra 6309 
functions for up to a 15% gain in overall 
speed. It is compatibie with all progranns 
tested to date! Save an additional $5 by 
purchasing RGBoost along with one of 
my other products listed below! 



EDTASM6309 va.Oa - S35>00 

Patches Tandy's Disk EDTASM to support Hita- 
chi 6309 codes! Supports all CoCo models, 
including stock 6809 models. CoCo 3 version 
uses 80 column screen, runs at 2MHz. YOU 
MUST HAVE A COPY OF DISK EDTASM. This 
is a PATCH ONLY! It will not work with "disk 
patched" cartridge EDTASM 

CC3FAX-$35.00 

Receive and print weather fascimile maps from 
shortwave! The US weather service sends them 
all the time! Requires 51 2K CoCo3 and short- 
wave receiver. Instructions for simple cable 
included. 

HRSDOS- $25.00 

Move programs and data between DECB and 
OS-9 disks! Supports RGB-DOS - move files 
easily between DECB and OS-9 partitions! No 
modifications to OS-9 modules required. 

DECB SmarfWatch Drivers ■ $20.00 

Access your SmartWatch from DECB! Adds 
function to BASIC (DATE$) for accessing date 
and time. Only $15.00 with any other purchase! 

Robert Gault 

532 N. Kenaud 

Oroeee Fomte V^oode, Ml 45256 

313-551-0335 

Please add $4 S&H per order 



15140 


bne 


nmclr 


15150 


puis 


b 


15160 


pshs 


X 


15170 


bsr 


ckdos 


15180 


leay 


,x 


15190 


puis 


X 


1 5200 sname imp [fgetnm.yl 


15210 






15220 dir bsr ckdos 


15230 


Idb 


drive 


15240 


stb 


$eb 


15250 


jsr[fc 


ir,x] 


15260 


sta 


$ffd9 


15270 


Ida 


#CR 


15280 


jsrscrprt 


15290 


bra 


link 


15300 






15310 setclk 


pshs a,x 


15320 


Idx#$ffd8 


15330 


Ida 


clock get default clock speed 


15340 


sta 


a.xset correct clock rate 


15350 


puis 


a.x.pc 


15360 






15370 Ckdos 


bsr setclk 


15380 


leax 


doslO.pcr 


15390 


tst dos 


15400 


beq 


xckdos 


15410 


leax 


dos 11, per 


1 5420 xckdos rts 


15430 






1 5440 diskon 


bsr setclk 


15450 


jsr[dskcon] 


15460 


sta 


$ffd9 


15470 


tstSfO 


15480 


rts 





15490 

15500xitopn ldx#$1ff 

15510 stx$957 file type 

15520 idx#$100 

1 5530 stx$97c record lengtti 

15540 com opnfig 

15550 Idd #r$l00+1 

1 5560 bsr ckdos 

15570 jsr[fopen,x] 

15580 sta $ffd9 

15590 orcc #1 

15600 tst $973 

15610 Ibeq badink 

15620 bsr ckdos 

15630 leay ,x 

15640 tdx$928 

15650 jsr[flof,y] 

15660 sta $ffd9 

15670 isr$b3ed 

1 5680 std lof 

15690 bsr ckdos 

15700 jsr[fclose,x] 

15710 sta $ffd9 

1 5720 ldx#$200 binary format 

1 5730 stx$957 file type 

15740 ldx#$100 

15750 sb<$97c record lengtti 

15760 Idd rR*$100+1 

1 5770 bsr ckdos 

15780 jsr[fopen,x] 

15790 sta $ffd9 

15800 Idd #1 

15810 std recnum 

15820 Ibra ssecO 

15830 

15840 unlink tst opnfig 

15850 beq nouink 

15860 Ibsr ckdos 

15870 jsr[fclose,x] 

15880 sta $ffd9 

15890 Idd zero 

15900 sta opnfig 

15910 std recnum 

15920 std frcnum 

15930 std lof 

15940 ldx$928 

15950 incb -1 

15960 std 7,xclear file record number 

15970 andcc #.not.1 

15980 rts 

15990 nouink orcc #1 

16000 rts 

16010 

16020 * Next routine used pnmarlly for 35/40 track 

disks but also can be 

16030 * used to bypass certain copyrigtit sctiemes. 

16040 rsmsg fee /Enter max values for 
Track#<CR> Sector#<CR>: / 

16060 fcb 

16060 reset leax rsmsg-l.pcr adjust max values 
for track/sector 

16070 com cpyflg 

16080 Ibsr cmdset 

16090 Ibsr decbin 

16100 bcs badrst 

16110 sta maxtrk 

16120 Ibsr more 

16130 sta maxsec 

16140 cirb 

16150 cmpa#9 

16160 bts a@ 

16170 incb 

16180 a@ Ida maxtrk 

16190 cmpa#17 

16200 beq d@ 

16210 bio b@ 

16220 deca 

16230 b@ Isia 

16240 pstis b 

16260 adda ,s+ 

16260 c@ sta maxgrn 

16270 rts 

16280 d@ deca 

16290 bra c@ 

16300 badrst orcc #1 

16310 rts 



16320 

16330 * PRINT: dump text screen to printer 

16340 print Ida $ff22 

16350 Isra 

16360 bcs Z@ 

16370 Idd #$36fe 

16380 sta $ffa2 $4000 

16390 ldx#$4000 

16400 stb $6f 

16410 a@ Ida ,x++ 

1 6420 jsr [$a002] print to console out 

16430 cmpx#$4fa0 

16440 bne a@ 

16450 Ida #CR 

16460 jsr[$a002] 

16470 clr$6f 

16480 rts 

16490z@ leax prterr-1,pcr 

16500 jsr prints 

16510 jsrgetchr 

16520 bra badrst 

16530 prterr fee /printer not ready!/ 

16540 fcb 

16550 

16560 • REPEAT KEYS FOR THE RGB DOS 

SYSTEM 

16570 * Based on ttie code of Roger Sctirag in 

Rainbow 

16580 

1 6590 * ADJUST ONLY RATEl or RATE2. Leave 

everything else atone! 

16600 

16610 RATEl EQU 60time for repeat key in IRQs 

16620 RATE2 EQU 3 ,05s repeat 

16630 SCRUBEQU $3F row 6 not repeated 

16640 KCLEAR EQU $14A RGB variable area 

16650 KHOLDEQU $148 may need to be moved 

16660 KEYBUF EQU $152 KEYBOARD BUFFER 

16670 KBFEND EQU $15A 

16680 

16690 

16700 REPEAT LDX #KEYBUF 

16710 a@ LDA ,X+ 

16720 ANDA #SCRUB 

16730 CMPA #SCRUB 

16740 BNE A@ 

16750 CMPX #KBFEND 

16760 BNE a@ 

16770 INC KCLEAR 

16780 LDA KCLEAR 

16790 CMPA #7 

16800 BLO Z@ 

16810 CLR KCLEAR 

16820 CLR KHOLD 

16830 A@ INC KHOLD 

16840 LDA KHOLD 

16850 CMPA #RATE1 

16860 BNE Z@ 

16870 SUBA #RATE2 

16880 STA KHOLD 

16890 LDX #KEYBUF 

16900 b@ LDA ,X 

16910 ORA #SCRUB 

16920 STA .X+ 

16930 CMPX #KBFEND 

16940 BNE b@ 

16950 Z@ JMP $8955 EXBasic IRQ 

16960 zendequ * 

16970 

16980 ORG KCLEAR 

16990 FDB 

17000 

17010 

17020 org $16a 

17030 jmp start 

17040 

17060 end start 



FINALLY!! 

THE END OF 

CotorZap93 

LISTINGS!! 




page 20 the world of 68' micros 



CcCc i Censumer Infc 

continued from page 5 

SIMPLE: The simple keyboard is 
less confusing than those having nnany 
unfanniliar keys. Disk BASIC is nnuch 
easier to learn than MS-DOS. And 
what could be sinnpler than Inserting a 
Program Pak and turning on the com- 
puter? 

VERSATILE: The Color Computer 
supports both TV sets and monitors, 
disk drives (floppy and hard) and cas- 
sette recorders, large character text 
screens and 80 column screens. It can 
be as simple or sophisticated as you 
want 

COMPATIBLE: with standard print- 
ers (serial port built in, parallel print- 
ers require a serial to parallel conver- 
ter), disk drives, and modems (exter- 
nal, maximum practical speed is 9600 
bps). 

POWERFUL: Multitasking, 64 col- 
ors, programming languages sup- 
ported - a good hacker's computer 

RELIABLE: Widely used for control- 
ling industrial processes, the Color 
Computer has a long history of reliabil- 
ity. Service is available at any Radio 
Shack. The ROM-based Disk BASIC 
operating system is immune to viruses. 

"the world of 68' micros": an excel- 
lent monthly magazine that, since 
1992, has provided programs, help, 
product reviews, and instruction for 
users of the Color Computer. 

DELPHI: a national telecommuni- 
cation information service with a Color 
Computer Special Interest Group, for 
exchanging programs and information 
with "CoCoNuts" across the country. 

COCO-LIST: An internet mailing list 
and use-net group of CoCo lovers. 

Computers are playing an ever-in- 
creasing role in modern society. The 
Color Computer 3 is ideal for anyone 
wanting to learn about them and how 
to use them, without having to spend 
a lot of money or attend special 
classes. No other computer in the world 
provides so much power for so little 
cost. 




NEW Hardware coming from 

Cloud Nine 



c/o Mark Marietta 
3749 County Road 30 
Delano, MN 55328 
email : nnmarlett@isd.net 
voice: 612-972-3261 



512k - 2048k upgrade board 

Just install SIMM memory in 512k in- 
crements (2x256K 8 or 9 chip SIMMs). 
Three chip SIMMs WILL NOT work! This 
is a timing requirement, as the 8/9 chip 
SIMMs use the same timing as the CoCo 
DRAM upgrades. 

SCSI Host adapter interface 

• Comes with 0S9 Drivers, 6x09. 
63b09e 1.78MHZ system "megaread" 
times are -1 1 seconds with 512 byte sec- 
tors (Nitros 2.00 Level3). 

• 256/512/1024 Sector size selection 

• FULL SCSI ID supported 

• Parity generation, enable/disable. Can 
use with parity devices such as ZIP drives! 

• Gold plated card edge connector 

• 50 pin SCSI header port 

• Installation/Operation Manual 

• Schematic package 

• 0S9 Utilities SCSltools, SCSIdesc, 
ZIP/JAZ Tools 

• SCSltools - A BASIC09 utility that will 
do low level SCSI commands. 

• SCSIdesc - A BASIC09 utility pro- 
gram that will create the SCSI descriptor 
for you based upon the menu drive op- 
tions inputted. 



• ZIPJAZtools - This utility will allow the 
features of the Iomega ZIP/JAZ drives. 
Eject disk, software protection are some. 
This utility isn't written yet, but I have the 
documentation needed from Iomega. Will 
do this soon! 

These products should be avail- 
able at the Chicago CoCoFest! Look 
for me there!! 

A 51 2K SIMM upgrade is ready to ship. 
The unit will ship with the following items: 

1 - 512K SIMM Memory Board with 8 or 
9 chip 120ns or faster SIMMS 

1 - Installation Manual 

1 - Schematic package 

1 - RSDOS Memory Test Program sup- 
plied on 5 1/4" disk. 

$40 each including shipping, UPS 
ground, within the US. If you are outside 
of the US please indicate method of ship- 
ment desired and I will check into the 
added cost, if any. 




BlackHawk 
Enterprises 



New Products! 

► Data Windows - $69.95 - A complete flat database program for OS-9/68K. 
Facilities include database creation, searching, maintenance and report generation. 
By Alpha Software Technologies. 

» GNU TWO - $49.95 - This package include a new port of GNU M4. and the AUTOCONF 
automatic configuration macros. Together with the included port of BASH these tools 
make automatic configuration of software a much easier chore. Widely used on UNIX 
and other operating systems, use it now on your OS-9 platform! Includes two new 
manuals totaling about 110 pages. 

• Model Rocketry Tools - $15 - Includes ports of tools for modeling and tracking the 
performance of various configurations of model rockets. Essential tools for those 
interested in designing rockets or achieving specified altitudes. Should run on any 

OS-9/68K machine. 

MM/1, MM/1 a and MM/lb hardware and other software still available, inquire! 

P.O. Box 10552 • Enid, OK 73706-0552 • (405) 234-391 1 



the worid of 68' micros page 2 1 



CoNect 



1629 South 61st street 
WestAllis, Wl 53214 

(pulland@omnifest.uwm.edu) 
414-328-4043 



Fast232- 16550 does serial! Port speed to 115200bps, 
transfers up to 5000 cps. Addressable to four locations. 
With 0S9 and Nitros9 drivers. $79.95 

2nd Port Daughter Board - $45.00 



OS9 Ivl2 Ml available! 

Level2 Bundle 

Dynacalc+Pgraph 
Profile 

TSEdit/Word+vi patch 
Epyx TriPak 



$49.95 

os9, b09, mvue, more! plug-n-go for 6809 

$19.95 
$19.95 
$12.95 
$14.95 
KoronisRift, Rescue Fractulus, Rogue 



King's Quest 3 




$9.95 


Microscopic Mission 




$4.95 


Sub Battle Simulator 




$4.95 


Hardware 






64Kupgrd 2 or 4 chip 




$5.95 


512K upgrdCusedj OK 




$24.95 


512K 




$44.95 


decb1.1rom + manual 




$12.95 


mpi upgrd sat. board 




$9.95 


cable, cassette 




$5.95 


cable, printer 




$5.95 


cable, rs232 (100ft!) 




$19.25 


coir mouse (1 button) 




$9.95 


mono composite monitor (used) 




$24.95 


OrchestraQOcc Pak 




$12.95 


DECS 






Disk EDTASM (used) 




$19.95 


Disk ProFile (used) 




$12.95 


One on One 




$7.95 


Sands of Egypt 




$7.95 


ROMPaks too! (inquire for titles) 




Parts (many more in stock!) 






1488/89 .75 


68b09e 


6.95 


1723 1.95 


6821a 


3.95 


1773 6.95 


SALT 


2.25 


2764 2.95 


74*6 


.35 


6802 3.50 


741s 133 


.42 



I've also been working on some A/flV hardware 
that nnay be available later One of these itenns is a 
revision of nny Expander idea that actually works on 

nnost CoCo 3's, not just the occasional "right" one. 
I'll keep everyone posted on any progress! 

Check with nne for connplete disk drive systenns, 

nnisc. hardware itenns, hardware repairs, and hard 

to find new and used CoCo software not listed! 

Shipping & Handling $4 US, $6 Can/Mex, $10 World 
ojfworld destinations please consult local Postmaster! 



StuoxgWauk 



Box 361 Matthews, IN 46957 Phone 317-998-7558 

CoCo 3 Software: 

Soviet Bloc $15 

GEMS $20 

CopyCat $5 

HFE- HPrint Font Editor $15 

MM/1 Software: 

Graphics Tools $25 

Starter Pak $15 

BShow $5 

CopyCat $10 

Painter $35 



ADVERTISER'S INDEX 



BlackHawk Enterprises 


21 


Cloud Nine 


21 


CoNect 


BC 


FARNA Systems 


9, EC 


Robert Gault 


20 


Hawksoft 


14 


Pennsylvania CoCoFest 


3 


Small Grafx 


14 


Strong Ware 


BC 



What are you waiting for? 

Get your friends to subscribe to 

the only magazine that still supports 

the Tandy Color Computer... 

''the world of 68' micros''! 

The more people who want the support, 

the longer it w i ll be here! 



page 22 the world of 68' micros